Coding: Mehrere Befehle gleichzeitig senden für z.B. Rolläden

  • Hallo, meine Frage betrifft Shelly Programmierung mit HTML, JS und letztendlich Curl.

    Ich steuere mein Licht&Rolladen per Javascript und übergebe den Befehl mit den Parametern an Curl. Das funktioniert ganz gut soweit.

    Nun zu meiner Frage: wie kann ich mehrere Befehle, z.B. Rolläden gleichzeitig fahren, übergeben? Habt ihr da Idee?

    Hier der Code, dies ist der Button in HTML:

    Code
    <button type="button" class="buttonHD" onclick="ToggleShelly('192.168.178.91','roller',0,'go=open' )">
        Rollo hoch
    </button>

    JavaScript Funktion, die das ganze an die php Seite danach übergibt:

    Code
    function ToggleShelly(ip, type, id, action) {
        fetch('Shellyproxy2021.php?ip=' + ip +'&type='+ type +'&id=' + id+'&action=' + action, {
    })
    .then()
    .catch(err => alert('Toggle failed'));
    window.location.reload("Start.php")
    }

    Hier wird der Befehl für Licht (Shelly 1) und Rolladen (Shelly 2.5) ausgeführt:

    Generell kann ich den Befehl leider nur auf dem Handy ausführen, nicht in Firefox auf dem PC. Wenn mir jemand auch bei der Lösung helfen könnte, wäre es echt super.

  • dazu ist der vorhandene Code nicht zu gebrauchen.. der ist ja, wenn ich das richtig gesehen habe, eigentlich Code von mir ;)
    kannst du denn selbst überhaupt halbwegs Javascript / PHP?

    was man machen könnte wäre eine foreach-Schleife, wahlweise im Javascript die dann mehrere Male die Funktion ToggleShelly() mit unterschiedlichen Daten aufruft oder z.B. im PHP in der "Proxy"-Datei.

    im PHP z.B. würde das etwas so aussehen:

    Code
    $shellies = array('192.168.178.22', '192.168.178.23', '192.168.178.24' );
    foreach ($shellies as $shelly) {
        $curlhandler = curl_init();
     ....
    
    }

    Vielleicht wäre es sinnvoller auf eine fertige Lösung zurückzugreifen (HomeAssistant, ioBrkoker ...), denn Schleifen (foreach, while ..) sind eigentlich absolute Basics beim Selber-Programmieren..

    >100 Shellies, darunter so gut wie alles was der Hersteller produziert hat. ;)
    :!: ich beantworte grundsätzlich keine Fragen per persönlicher Nachricht:!:

  • Hallo,

    ja der Code ist von Dir, wofür ich Dir danke. Leider lässt der sich nicht über Computer Browser ausführen, daher dachte ich, vielleicht kommt jemand mit einer anderen Idee, wie man den Aufruf machen könnte.

    Ich programmiere mit PHP und JS, wobei mein Schwerpunkt in SQL liegt. Ich war auf der Suche nach einer Idee und die Übergabe eines arrays greife ich von Dir auf, ist eine gute Idee.

    Meine Idee wäre, über den Button an JS ein Array mit den Shellies zu übergeben und den Rest, vor allem aber die action, ob rauf oder runter oder stopp.

    So in die Richtung würde ich in JS gehen:

    Code
    const IParray= ["192.168.178.22", "192.168.178.23", "192.168.178.24"];
    let i = 0;
    let text = "";
    while (IParray[i]) {
        fetch('Shellyproxy2021.php?ip=' + IParray[i] +'&type='+ type +'&id=' + id+'&action=' + action, {
        })
        .then()
        .catch(err => alert('Toggle failed'));
    i++;
    }

    Ich brauche leider noch einen kleinen Stupser:

    - wie übergebe ich das Array von dem Button?

    - wie übergebe ich den Rest, damit die 3 Shellies nacheinnader (while) angesteuert werden

    Einmal editiert, zuletzt von AndyKL (26. Oktober 2021 um 10:28)

  • wenn du den Code in eine Funktion verpackst sollte der sich auch problemlos einem Button zuordnen lassen, ganz grob und ungetestet

    anschließend brauchst du dem Button nur ein onclick event zuweisen, also im HTML dann sowas wie

    <button onclick="closeRollers()">Mach zu!</button>

    ich hab die 3 Variablen (Type, ID vom Relay und das Event->close) einfach direkt in der Funktion hinterlegt, damit die Proxy.php alle notwendigen Daten bekommt. Das geht in der Theorie natürlich eleganter aber so kommst du vermutlich selbst viel besser damit klar.

    Hilft das ein bisschen?

    Leider lässt der sich nicht über Computer Browser ausführen,

    ich hab den damals unter Google Chrome getestet, damit geht es nicht? Firefox müsste ich mir mal anschauen aber grunsätzlich sollte das identisch sein.

    >100 Shellies, darunter so gut wie alles was der Hersteller produziert hat. ;)
    :!: ich beantworte grundsätzlich keine Fragen per persönlicher Nachricht:!:

  • Hallo,

    das hilft mir sehr, vielen Dank.

    Ich hab mich irgendwie versteift, alles in einer Funktion machen zu wollen. Ich habe zu Hause 2x 2 Rolläden mit Shelly automatisiert, die unabhänging voneinander laufen sollen.

    Jede der "Doppelrollos" bekommt: hoch, stopp und runter. Also mache ich hierzu 3 JS Funktionen und fertig.

    Für die anderen Rollos noch mal 3 Funktionen, ist ja egal.

    Damit hast du mir sehr geholfen.

    Es ist sehr schade, dass der Befehl über Laptop Browser Firefox nicht geht. Meinst du, du könntest da mal nachschauen? Das wäre spitze.