Beiträge von H-OS.de

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

    Moinsen Leute,

    ich möchte gerne meine Shelly's und das ganze drum herum noch etwas smarter machen.

    Jetzt stellen sich mir ein paar Fragen und ein paar weitere Themen wo ich Hilfe bräuchte..


    Kann der Shelly Anfragen per HTTPS mit GET oder POST an meinen Webserver stellen?

    Dann möchte ich das ganze im Scripting einbauen hab folgenden Beispielcode aus der Bibliothek geladen:

    Spoiler anzeigen

    /******************* START CHANGE HERE *******************/

    let CONFIG = {

    // When set to true, debug messages will be logged to the console

    debug: false,

    // When set to true the scan will be active, otherwise it will be passive.

    // Active scan means the scanner will ping back the Bluetooth device to receive all its data, but it will drain the battery faster

    active: false,

    // When `allowedMacAddresses` is set to null, evets from every bluetooth device are accepted.

    // allowedMacAddresses: null,

    allowedMacAddresses: [

    "aa:bc:12:34:56:78", // events only from these mac addresses are allowed.

    "11:22:33:45:5a:bc",

    ],

    /**

    * Called when motion is reported from the filtered Shelly BLU Motion devices.

    * @param {Boolean} motion true, when there is a motion, false otherwise.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    motionHandler: function (motion, eventData) {

    // Toggle the first replay ON/OFF based on the motion value.

    Shelly.call("Switch.Set", { id: 0, on: motion });

    console.log("Motion", motion);

    },

    /**

    * Called when illuminance is reported from the filtered Shelly BLU Motion devices.

    * @param {Number} illuminance Current illuminance value.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    illuminanceHandler: function (illuminance, eventData) {

    // Compile the topic based on the mac address of the reporter.

    let topic = eventData.address + "/illuminance";

    // Publush the data.

    MQTT.publish(topic, String(illuminance));

    },

    /**

    * Called when packet from filtered Shelly BLU Motion devices is received.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    onStatusUpdate: function (eventData) {

    // Do nothing at the moment.

    }

    };

    /******************* STOP CHANGE HERE *******************/

    const ALLTERCO_MFD_ID_STR = "0ba9";

    const BTHOME_SVC_ID_STR = "fcd2";

    const uint8 = 0;

    const int8 = 1;

    const uint16 = 2;

    const int16 = 3;

    const uint24 = 4;

    const int24 = 5;

    // The BTH object defines the structure of the BTHome data

    const BTH = {

    0x00: { n: "pid", t: uint8 },

    0x01: { n: "battery", t: uint8, u: "%" },

    0x02: { n: "temperature", t: int16, f: 0.01, u: "tC" },

    0x03: { n: "humidity", t: uint16, f: 0.01, u: "%" },

    0x05: { n: "illuminance", t: uint24, f: 0.01 },

    0x21: { n: "motion", t: uint8 },

    0x2d: { n: "window", t: uint8 },

    0x2e: { n: "humidity", t: uint8, u: "%" },

    0x3a: { n: "button", t: uint8 },

    0x3f: { n: "rotation", t: int16, f: 0.1 },

    0x45: { n: "temperature", t: int16, f: 0.1, u: "tC" },

    };

    function getByteSize(type) {

    if (type === uint8 || type === int8) return 1;

    if (type === uint16 || type === int16) return 2;

    if (type === uint24 || type === int24) return 3;

    //impossible as advertisements are much smaller;

    return 255;

    }

    // functions for decoding and unpacking the service data from Shelly BLU devices

    const BTHomeDecoder = {

    utoi: function (num, bitsz) {

    const mask = 1 << (bitsz - 1);

    return num & mask ? num - (1 << bitsz) : num;

    },

    getUInt8: function (buffer) {

    return buffer.at(0);

    },

    getInt8: function (buffer) {

    return this.utoi(this.getUInt8(buffer), 8);

    },

    getUInt16LE: function (buffer) {

    return 0xffff & ((buffer.at(1) << 8) | buffer.at(0));

    },

    getInt16LE: function (buffer) {

    return this.utoi(this.getUInt16LE(buffer), 16);

    },

    getUInt24LE: function (buffer) {

    return (

    0x00ffffff & ((buffer.at(2) << 16) | (buffer.at(1) << 8) | buffer.at(0))

    );

    },

    getInt24LE: function (buffer) {

    return this.utoi(this.getUInt24LE(buffer), 24);

    },

    getBufValue: function (type, buffer) {

    if (buffer.length < getByteSize(type)) return null;

    let res = null;

    if (type === uint8) res = this.getUInt8(buffer);

    if (type === int8) res = this.getInt8(buffer);

    if (type === uint16) res = this.getUInt16LE(buffer);

    if (type === int16) res = this.getInt16LE(buffer);

    if (type === uint24) res = this.getUInt24LE(buffer);

    if (type === int24) res = this.getInt24LE(buffer);

    return res;

    },

    // Unpacks the service data buffer from a Shelly BLU device

    unpack: function (buffer) {

    //beacons might not provide BTH service data

    if (typeof buffer !== "string" || buffer.length === 0) return null;

    let result = {};

    let _dib = buffer.at(0);

    result["encryption"] = _dib & 0x1 ? true : false;

    result["BTHome_version"] = _dib >> 5;

    if (result["BTHome_version"] !== 2) return null;

    //can not handle encrypted data

    if (result["encryption"]) return result;

    buffer = buffer.slice(1);

    let _bth;

    let _value;

    while (buffer.length > 0) {

    _bth = BTH[buffer.at(0)];

    if (typeof _bth === "undefined") {

    console.log("BTH: Unknown type");

    break;

    }

    buffer = buffer.slice(1);

    _value = this.getBufValue(_bth.t, buffer);

    if (_value === null) break;

    if (typeof _bth.f !== "undefined") _value = _value * _bth.f;

    if (typeof result[_bth.n] === "undefined") {

    result[_bth.n] = _value;

    }

    else {

    if (Array.isArray(result[_bth.n])) {

    result[_bth.n].push(_value);

    }

    else {

    result[_bth.n] = [

    result[_bth.n],

    _value

    ];

    }

    }

    buffer = buffer.slice(getByteSize(_bth.t));

    }

    return result;

    },

    };

    function onReceivedPacket(data) {

    if (CONFIG._processedMacAddresses !== null) {

    if (CONFIG._processedMacAddresses.indexOf(data.address) < 0) {

    logger(["Received event from", data.address, "outside of the allowed addresses"], "Info");

    return;

    }

    }

    if (

    typeof CONFIG.motionHandler === "function" &&

    typeof data.motion !== "undefined"

    ) {

    CONFIG.motionHandler(data.motion === 1, data);

    logger("Motion handler called", "Info");

    }

    if (

    typeof CONFIG.illuminanceHandler === "function" &&

    typeof data.illuminance !== "undefined"

    ) {

    CONFIG.illuminanceHandler(data.illuminance, data);

    logger("Illuminance handler called", "Info");

    }

    if (typeof CONFIG.onStatusUpdate === "function") {

    CONFIG.onStatusUpdate(data);

    logger("New status update", "Info");

    }

    }

    //saving the id of the last packet, this is used to filter the duplicated packets

    let lastPacketId = 0x100;

    // Callback for the BLE scanner object

    function BLEScanCallback(event, result) {

    //exit if not a result of a scan

    if (event !== BLE.Scanner.SCAN_RESULT) {

    return;

    }

    //exit if service_data member is missing

    if (

    typeof result.service_data === "undefined" ||

    typeof result.service_data[BTHOME_SVC_ID_STR] === "undefined"

    ) {

    return;

    }

    let unpackedData = BTHomeDecoder.unpack(

    result.service_data[BTHOME_SVC_ID_STR]

    );

    //exit if unpacked data is null or the device is encrypted

    if (

    unpackedData === null ||

    typeof unpackedData === "undefined" ||

    unpackedData["encryption"]

    ) {

    logger("Encrypted devices are not supported", "Error");

    return;

    }

    //exit if the event is duplicated

    if (lastPacketId === unpackedData.pid) {

    return;

    }

    lastPacketId = unpackedData.pid;

    unpackedData.rssi = result.rssi;

    unpackedData.address = result.addr;

    onReceivedPacket(unpackedData);

    }

    // Initializes the script and performs the necessary checks and configurations

    function init() {

    //exit if can't find the config

    if (typeof CONFIG === "undefined") {

    console.log("Error: Undefined config");

    return;

    }

    //get the config of ble component

    let BLEConfig = Shelly.getComponentConfig("ble");

    //exit if the BLE isn't enabled

    if (!BLEConfig.enable) {

    console.log(

    "Error: The Bluetooth is not enabled, please enable it from settings"

    );

    return;

    }

    //check if the scanner is already running

    if (BLE.Scanner.isRunning()) {

    console.log("Info: The BLE gateway is running, the BLE scan configuration is managed by the device");

    }

    else {

    //start the scanner

    let bleScanner = BLE.Scanner.Start({

    duration_ms: BLE.Scanner.INFINITE_SCAN,

    active: CONFIG.active

    });

    if (!bleScanner) {

    console.log("Error: Can not start new scanner");

    }

    }

    if (

    typeof CONFIG.allowedMacAddresses !== "undefined"

    ) {

    if (CONFIG.allowedMacAddresses !== null) {

    // Process configured mac addresses all to lower case and remove duplicates.

    CONFIG._processedMacAddresses =

    CONFIG

    .allowedMacAddresses

    .map(function (mac) { return mac.toLowerCase(); })

    .filter(function (value, index, array) { return array.indexOf(value) === index; })

    }

    else {

    CONFIG._processedMacAddresses = null;

    }

    }

    //subscribe a callback to BLE scanner

    BLE.Scanner.Subscribe(BLEScanCallback);

    }


    In das Script würde ich gerne einbauen, dass ich die Daten die ausgewertet werden auch an meinen Server senden kann und dass Shelly XY geschaltet wird.

    Das ganze dann am besten noch mit wenn dann also quasi wenn hell dann kein Licht wenn dunkel dann ja.


    Außerdem hab ich das Problem, dass zumindest per Szene das Licht bzw. die Bewegung von BLU Motion nur alle paar Minuten sporadisch erkannt wird und nicht im Sekunden Bereich.


    Kann mir da jemand sagen, wie das ganze eingestellt werden muss?

    Muss ich den Beacon Modus anschalten um häufiger Updates zu bekommen damit ich den Bewegungsmelder quasi normal benutzen kann?

    Alles weitere kommt dann noch im weiteren "Gesprächsverlauf "

    Falls weitere Infos benötigt werden, gerne Anfragen.

    Bin noch ziemlich neu in den ganzen und möchte gerne so einiges umsetzen bin aber manchmal noch etwas überfragt.

    Vor allem halt mit dem sporadischen Motion Updates.

    Erste Frage: Ja, kannst du aus dem Browser aufrufen, oder ein Shelly ruft auf...

    Okey, das ist ja schon Mal ganz praktisch.

    Das schaue ich mir dann in Ruhe nochmal an.

    Also löst man quasi die Sachen im Scripting auch mit URL untereinander?

    Zweite Frage: Natürlich kann jeder, der in dein WLAN darf, auch deine Shellys über die IP finden und schalten etc. Wenn du das nicht willst, dann musst du Maßnahmen treffen. Persönlich sehe ich das nicht so eng, Familie und Freunde kennen das WLAN - Passwort, ich vertraue ihnen, es gab auch noch nie Grund zur Beanstandung...

    Ja, das sehe ich an sich eigentlich auch so.

    Aber könnte ja jemand irgendein Mist auf seinem Endgerät haben ohne es zu wissen, was dann Einstellungen oder ähnliches vornehmen kann.

    Hätte gedacht, dass Shelly da irgendwas hat wie n Passwort oder intern irgendwelche Daten, die dann abchecken wer, welche Anfrage schicken darf und wer nicht.

    Danke auf jeden Fall für die Info.

    Hab den Thread hier mit Szenen gefunden, wie man das wohl umsetzen könnte..

    Muss ich mir Mal anschauen, bis ich das Scripting verstanden habe und beherrsche.

    Vielleicht kann mir noch jemand Tipps geben.

    Hab den folgenden Beispiel Code gefunden um die Events zu bekommen:

    Spoiler anzeigen

    /******************* START CHANGE HERE *******************/

    let CONFIG = {

    // When set to true, debug messages will be logged to the console

    debug: false,

    // When set to true the scan will be active, otherwise it will be passive.

    // Active scan means the scanner will ping back the Bluetooth device to receive all its data, but it will drain the battery faster

    active: false,

    // When `allowedMacAddresses` is set to null, evets from every bluetooth device are accepted.

    // allowedMacAddresses: null,

    allowedMacAddresses: [

    "aa:bc:12:34:56:78", // events only from these mac addresses are allowed.

    "11:22:33:45:5a:bc",

    ],

    /**

    * Called when motion is reported from the filtered Shelly BLU Motion devices.

    * @param {Boolean} motion true, when there is a motion, false otherwise.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    motionHandler: function (motion, eventData) {

    // Toggle the first replay ON/OFF based on the motion value.

    Shelly.call("Switch.Set", { id: 0, on: motion });

    console.log("Motion", motion);

    },

    /**

    * Called when illuminance is reported from the filtered Shelly BLU Motion devices.

    * @param {Number} illuminance Current illuminance value.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    illuminanceHandler: function (illuminance, eventData) {

    // Compile the topic based on the mac address of the reporter.

    let topic = eventData.address + "/illuminance";

    // Publush the data.

    MQTT.publish(topic, String(illuminance));

    },

    /**

    * Called when packet from filtered Shelly BLU Motion devices is received.

    * @param {Object} eventData Object, containing all parameters received from the Shelly BLU Motion device. Example: {"encryption":false,"BTHome_version":2,"pid":16,"battery":100,"illuminance":109,"motion":1,"button":1,"rssi":-53,"address":"aa:bc:12:34:56:78"}

    */

    onStatusUpdate: function (eventData) {

    // Do nothing at the moment.

    }

    };

    /******************* STOP CHANGE HERE *******************/

    const ALLTERCO_MFD_ID_STR = "0ba9";

    const BTHOME_SVC_ID_STR = "fcd2";

    const uint8 = 0;

    const int8 = 1;

    const uint16 = 2;

    const int16 = 3;

    const uint24 = 4;

    const int24 = 5;

    // The BTH object defines the structure of the BTHome data

    const BTH = {

    0x00: { n: "pid", t: uint8 },

    0x01: { n: "battery", t: uint8, u: "%" },

    0x02: { n: "temperature", t: int16, f: 0.01, u: "tC" },

    0x03: { n: "humidity", t: uint16, f: 0.01, u: "%" },

    0x05: { n: "illuminance", t: uint24, f: 0.01 },

    0x21: { n: "motion", t: uint8 },

    0x2d: { n: "window", t: uint8 },

    0x2e: { n: "humidity", t: uint8, u: "%" },

    0x3a: { n: "button", t: uint8 },

    0x3f: { n: "rotation", t: int16, f: 0.1 },

    0x45: { n: "temperature", t: int16, f: 0.1, u: "tC" },

    };

    function getByteSize(type) {

    if (type === uint8 || type === int8) return 1;

    if (type === uint16 || type === int16) return 2;

    if (type === uint24 || type === int24) return 3;

    //impossible as advertisements are much smaller;

    return 255;

    }

    // functions for decoding and unpacking the service data from Shelly BLU devices

    const BTHomeDecoder = {

    utoi: function (num, bitsz) {

    const mask = 1 << (bitsz - 1);

    return num & mask ? num - (1 << bitsz) : num;

    },

    getUInt8: function (buffer) {

    return buffer.at(0);

    },

    getInt8: function (buffer) {

    return this.utoi(this.getUInt8(buffer), 8);

    },

    getUInt16LE: function (buffer) {

    return 0xffff & ((buffer.at(1) << 8) | buffer.at(0));

    },

    getInt16LE: function (buffer) {

    return this.utoi(this.getUInt16LE(buffer), 16);

    },

    getUInt24LE: function (buffer) {

    return (

    0x00ffffff & ((buffer.at(2) << 16) | (buffer.at(1) << 8) | buffer.at(0))

    );

    },

    getInt24LE: function (buffer) {

    return this.utoi(this.getUInt24LE(buffer), 24);

    },

    getBufValue: function (type, buffer) {

    if (buffer.length < getByteSize(type)) return null;

    let res = null;

    if (type === uint8) res = this.getUInt8(buffer);

    if (type === int8) res = this.getInt8(buffer);

    if (type === uint16) res = this.getUInt16LE(buffer);

    if (type === int16) res = this.getInt16LE(buffer);

    if (type === uint24) res = this.getUInt24LE(buffer);

    if (type === int24) res = this.getInt24LE(buffer);

    return res;

    },

    // Unpacks the service data buffer from a Shelly BLU device

    unpack: function (buffer) {

    //beacons might not provide BTH service data

    if (typeof buffer !== "string" || buffer.length === 0) return null;

    let result = {};

    let _dib = buffer.at(0);

    result["encryption"] = _dib & 0x1 ? true : false;

    result["BTHome_version"] = _dib >> 5;

    if (result["BTHome_version"] !== 2) return null;

    //can not handle encrypted data

    if (result["encryption"]) return result;

    buffer = buffer.slice(1);

    let _bth;

    let _value;

    while (buffer.length > 0) {

    _bth = BTH[buffer.at(0)];

    if (typeof _bth === "undefined") {

    console.log("BTH: Unknown type");

    break;

    }

    buffer = buffer.slice(1);

    _value = this.getBufValue(_bth.t, buffer);

    if (_value === null) break;

    if (typeof _bth.f !== "undefined") _value = _value * _bth.f;

    if (typeof result[_bth.n] === "undefined") {

    result[_bth.n] = _value;

    }

    else {

    if (Array.isArray(result[_bth.n])) {

    result[_bth.n].push(_value);

    }

    else {

    result[_bth.n] = [

    result[_bth.n],

    _value

    ];

    }

    }

    buffer = buffer.slice(getByteSize(_bth.t));

    }

    return result;

    },

    };

    function onReceivedPacket(data) {

    if (CONFIG._processedMacAddresses !== null) {

    if (CONFIG._processedMacAddresses.indexOf(data.address) < 0) {

    logger(["Received event from", data.address, "outside of the allowed addresses"], "Info");

    return;

    }

    }

    if (

    typeof CONFIG.motionHandler === "function" &&

    typeof data.motion !== "undefined"

    ) {

    CONFIG.motionHandler(data.motion === 1, data);

    logger("Motion handler called", "Info");

    }

    if (

    typeof CONFIG.illuminanceHandler === "function" &&

    typeof data.illuminance !== "undefined"

    ) {

    CONFIG.illuminanceHandler(data.illuminance, data);

    logger("Illuminance handler called", "Info");

    }

    if (typeof CONFIG.onStatusUpdate === "function") {

    CONFIG.onStatusUpdate(data);

    logger("New status update", "Info");

    }

    }

    //saving the id of the last packet, this is used to filter the duplicated packets

    let lastPacketId = 0x100;

    // Callback for the BLE scanner object

    function BLEScanCallback(event, result) {

    //exit if not a result of a scan

    if (event !== BLE.Scanner.SCAN_RESULT) {

    return;

    }

    //exit if service_data member is missing

    if (

    typeof result.service_data === "undefined" ||

    typeof result.service_data[BTHOME_SVC_ID_STR] === "undefined"

    ) {

    return;

    }

    let unpackedData = BTHomeDecoder.unpack(

    result.service_data[BTHOME_SVC_ID_STR]

    );

    //exit if unpacked data is null or the device is encrypted

    if (

    unpackedData === null ||

    typeof unpackedData === "undefined" ||

    unpackedData["encryption"]

    ) {

    logger("Encrypted devices are not supported", "Error");

    return;

    }

    //exit if the event is duplicated

    if (lastPacketId === unpackedData.pid) {

    return;

    }

    lastPacketId = unpackedData.pid;

    unpackedData.rssi = result.rssi;

    unpackedData.address = result.addr;

    onReceivedPacket(unpackedData);

    }

    // Initializes the script and performs the necessary checks and configurations

    function init() {

    //exit if can't find the config

    if (typeof CONFIG === "undefined") {

    console.log("Error: Undefined config");

    return;

    }

    //get the config of ble component

    let BLEConfig = Shelly.getComponentConfig("ble");

    //exit if the BLE isn't enabled

    if (!BLEConfig.enable) {

    console.log(

    "Error: The Bluetooth is not enabled, please enable it from settings"

    );

    return;

    }

    //check if the scanner is already running

    if (BLE.Scanner.isRunning()) {

    console.log("Info: The BLE gateway is running, the BLE scan configuration is managed by the device");

    }

    else {

    //start the scanner

    let bleScanner = BLE.Scanner.Start({

    duration_ms: BLE.Scanner.INFINITE_SCAN,

    active: CONFIG.active

    });

    if (!bleScanner) {

    console.log("Error: Can not start new scanner");

    }

    }

    if (

    typeof CONFIG.allowedMacAddresses !== "undefined"

    ) {

    if (CONFIG.allowedMacAddresses !== null) {

    // Process configured mac addresses all to lower case and remove duplicates.

    CONFIG._processedMacAddresses =

    CONFIG

    .allowedMacAddresses

    .map(function (mac) { return mac.toLowerCase(); })

    .filter(function (value, index, array) { return array.indexOf(value) === index; })

    }

    else {

    CONFIG._processedMacAddresses = null;

    }

    }

    //subscribe a callback to BLE scanner

    BLE.Scanner.Subscribe(BLEScanCallback);

    }

    Also das ganze mit dem Scripting ist noch bei für mich. Da muss ich mich erstmal rein fuchsen wie das funktioniert.

    Muss ich denn um die URL aufzurufen irgendwas aktivieren oder noch einstellen oder kann ich die theoretisch auch einfach aus jedem Browser aufrufen und es passiert was?

    Wie sieht es dann da mit der Sicherheit aus, dass nicht jeder in meinem Netzwerk irgendwelche Anfragen schicken kann?


    Und der Cover Mode.. ist das dann auch irgendwie als Hardware Implementierung gedacht also wie mit dem Beispiel Rolläden, dass dort ein Sensor dran ist, der dann den Maintenance Mode aktiviert?


    Die virtuellen Gruppen und Komponenten hab ich auch noch nicht ganz verstanden.

    Muss ich mir auch noch anschauen.

    Bin gerade dabei, per Szene das Licht via BLU Motion automatisch ein und aus zu schalten.

    Das mit dem Scripting rall ich noch nicht ganz.

    Den Eingang (SW) kannst du über einen http-request in den "Detached Mode" schalten, oder wieder freigeben.

    Jo nice, das hört sich ja schon so an, als wenn das in die richtige Richtung geht und ich damit arbeiten kann.

    Hast du da zufällig was fertiges oder ne Ahnung, wie ich das umsetze?

    Alternativ evtl. wo ich das nachlesen kann?

    Moinsen..

    Mal so spontan die Frage, ob man per App oder anderweitig ne Schaltsperre aktivieren kann.

    Also quasi ich gehe in die App, drücke einen Button für ein einzelnes Gerät oder eine ganze Gruppe und dann wird daraufhin quasi der Zustand eingefroren bzw. gesperrt.

    Also wenn Gerät/Licht an dann bleibt es an und bei aus bleibt es aus.

    Quasi das ich schalten kann am Schalter wie ich will und der Zustand beim Sperren bleibt quasi erhalten.

    Dann das ganze entweder per Button Druck wieder frei zu schalten und/oder dann zusätzlich vll. noch per Timer.


    Jemand ne Idee?

    verwende ich in der Küche um zusätzlich Handys laden zu können. Das Gateway ist zu groß um gleichzeitig einen Schukostecker anzustecken. Ansonsten ja, ist eine Lösung, wenn man die Steckdose nicht braucht oder nie aussteckt

    Hab ich tatsächlich auch schon gedacht.

    Habe auch eine gefunden wo die beiden Anschlüsse also USB A und C als Schnelllade Variante sind. Mit PD und QC..

    Aber genau das mit dem, man kann nichts mehr einstecken ist auch zum Teil mein Problem..

    In die Steckdose die in Frage kommen würde, steckt ein Repeater und in 1 anderen auch.

    Genau die die vom Standort her optimal für die Gateways wären.

    Das ist das blöde dabei.


    Weiß noch nicht wie ich das mache..

    Hab jetzt erstmal fast alle Shelly's angebracht also die für die Lampen an sich.

    Jetzt spätestens nächste Woche bringe ich die ganzen Bewegungsmelder und Tür/Fenstersensoren an und richte das alles ein.


    Bin jetzt gerade dabei vorerst den letzten Mini in die Dose vom Lichtschalter zu packen und alles erstmal grundsätzlich einrichten.


    Dann kommt noch der Rest.


    Am liebsten dann in Zukunft (das Geld fehlt leider um alles auf einmal zu besorgen 😂👍🏼) alle Steckdosen und Schalter usw.

    Quasi jede mögliche Stromquelle Smart und mit PM also Stromverbrauch Überwachung.

    Dann kann ich bei jedem Gerät was irgendwie in einer Dose hängt sehen, was wann wo wie viel Strom verbraucht und alles smart an und ausschalten.

    Welchen Gedanken ich auch hatte, als Kindersicherung die Geräte bzw. Steckdosen nur einzuschalten, wenn benötigt..

    Aber da bekommt meine Frau wahrscheinlich die Krise, wenn Sie nicht einfach alles wie gewohnt nutzen kann :/:D

    Habe bzw. Hole mir alles in Gen4. Will Zukunftsorientierte Geräte.

    Dachte mir die paar Euro schaden nicht.

    Naja ja das kann wohl sein. Dachte mir dann sind die anderen nicht als Gateway aktiviert und die Funktion Lager ich dann aus, da ich die Gateways jetzt sowieso bekomme. Die waren im Bundle mit drin.


    Das Bundle war sehr stark reduziert.

    Habe für 1 Gateway und 3x Tür Sensor +3 Mal Motion 40 Euro bezahlt.

    Moinsen Leute.

    Ich habe mir mehrere Bundles von einem Gateway, 3 BLU Door/Window und 3 BLU Motion bestellt.

    Ich möchte das Ganze jetzt dann bei mir im Haus überall anbringen.

    Mein Gedanke war, in jeder Ecke des Hauses die BLU Gateways zu packen. Dafür muss ich noch USB Anschlüsse organisieren.. schade, dass man die nicht anderweitig verbasteln kann. Oder jemand ne Idee.

    Dann sollen jeweils die BLU Geräte also Tür und Bewegungsmelder auf den Gateways verteilt werden. Ich weiß jetzt nicht genau ob die sonst auch auf mehreren verbunden sein können zwecks Backup der Verbindung.

    Muss ich da irgendwas besonderes beachten?

    Ich möchte damit in jedem Raum in Zukunft das Licht automatisch steuern und dann auch auslesen können wann wo jemand Zuhause ist usw..


    Außerdem die Frage.. wie packt ihr die Geräte ins WLAN und in die Google Home App also mit Namen usw.

    Ich möchte das mein WLAN sowie die Apps (Shelly/GHome) etwas aufgeräumt bleibt dementsprechend alles benannt und mit festen IP Bereichen usw. Also mein Gedanke war 1 Gerät nach dem anderen zu verbinden, alle mit Standort und Namen und fester IP im WLAN einspeichern und dann auch jeweils in den Apps. Hat da jemand ne Idee für ne vernünftige Namensgebung oder wie habt ihr das?

    MfG

    der Blu Window hat mehrere Sensoren verbaut. einmal den Reed kontakt für offen /geschlossen und einen Winkelsensor / Schwerkaftsensor. damit erkennt der Blu wenn er geneigt wird.

    In Kombination beider Werte, kann man bei geöffnetem Fensterflügel zwischen offen und keine Neigung und geöffnet und Neigung unterscheiden

    grüße schreckus

    Achso lol das ja mega smart und geil ich dachte schon ich müsste überall 2 Sensoren anbringen.

    Muss ich den Sensor dann ganz oben am Fenster anbringen damit er die Neigung verlässlich erkennt oder geht auch unten?

    Kannst du da evtl. Mal Code zu senden, wie du das ganze umsetzt?

    Was mich auch noch interessieren würde, wie checkst du ob Fenster offen/geschlossen vs angekippt? 2 Sensoren am Fenster?

    Das Frage ich mich aktuell tatsächlich auch.

    Aber warum ist das nicht möglich?


    Ich habe gelesen, dass man per Scripting das Bluetooth Scannen kann.

    Da bekomme ich dann ja auch Ergebnisse was an Geräten da ist oder nicht?

    Dann müsste ich doch theoretisch im Script sagen können, lese alle Geräte in der Nähe, gibt mir die ID des Gerätes und Vergleiche sie. Wenn gleich dann mach X, wenn nicht dann Y.

    Wäre doch richtig praktisch, wenn Shelly das selbständig noch einbauen würde und die auch auf die Idee kämen.

    Ich hoffe das geht, dass wäre nämlich super für ein paar Szenarien die ich mir gedacht hatte.