Beiträge von DirtyHaerry

    Habe es zum Laufen bekommen. Dank der letzten Template habe ich meinen Fehler gefunden(peinlich hatte den Pin in Pullup gesetzt).zum AP-Mode habe ich festgestellet das wenn des Relais laut meinem Code eingeschaltet ist und die Zeit abläuft besteht der Ap nicht ist aber wieder da wenn Relais abschaltet.Auf alle Fälle Danke für euren Einsatz und Hilfe hier. Würde jetzt das Thema als erledigt betrachten Danke noch mal

    Habe Tasmota auf gespielt und das 2te Template installiert und activiert im GPIO Viewer sind folgende Pins bei nicht betätigen des SW in LOW: 0, 4, 26. und 25 in Hight. Die Pins 32, 33 sind für RX und TX.wenn ich den SW betätige gehen Pin 0, 4 und 26 in High der rest bleibt wie es ist. Heisst das jetzt das Pin 0 oder Pin 4 für sw zuständigt sind? habe den Pin für SW im Code auf 0 gestezt aber keine veränderung.

    Hier meine Intention zu dem Ganzen: Der Motor betreibt eine Futterkette,Diese wird per Stallcomputer gesteuert, es können bis zu 10 Fütterungen am Tag eingestellt werden. Wenn jetzt der Bauer seine Fütterung am Tag auf sagen wir mal 6 fütterungen eingestellt hat, soll der shelly 1 pluss der Liniarmotor auf öffnen stellen wenn die 6 fütterung anläuft um Futterzusatz mit in die Futterkette zubringen. da es von dem Stallcomputer verschiedene Hard- bzw. Soft-ware versionen gib möchte ich als Standalone machen. Ohne das auf einem Smartphone etwas installiert bzw dauernd aktualisiert werden muss. Klar könnte ich das auch mit dem Script auf der Orginal Shelly lösen habe mich einbischen eingelesen und ja gebe zu das ich da nicht die Hellste Kerze auf dem Tisch bin, was das Scripten mit Shelly und Tasmota angeht.mit einem "normalen ESP32 hat alles geklappt nur müsste ich dann mehr Hradware verbauen und verdahten DC-DC wandler für 24V auf 3,3 was der Shelly ja schon hat und das zu einem günstigeren Preis. Desweiteren möchte ich es so einfach wie möglich bedienbar haben.Das ganze soll ein Prototyp werden.

    Mein Plan ist halt das man es bedienen kann ohne irgend eine Software auf dem Smartphone zu installieren, Das hat ja auch soweit mit meinem Code geklappt, Hatte einen AP mit Htmlseite wo ich den wert einstellen kann und das alles functioniert reibungslos das einzie was halt nicht klappt war das er dein Schaltimpuls nicht wahr nahm und den Counter anfing der dann das relais schalten sollte. Mit der Tasmota wurde das Relais auch nur dann geschaltet wenn ich den Trottle im Smartphone getätigt habe, wenn ich sw so auf gnd gezogen habe passierte nix.

    Ups bischen gross geworden,:saint: der liniarmoter soll erst bei einer einstellbaren einschaltung des motors geschaltet werden. Klar könnte ich das glaube ich auch mit shelly oder Tasmota scripts hin bekommen, aber da wo ich das einsetzen möchte gibt es kein Wlan kein internet

    des weiten braucht es keine zusätzliche Software, denn es muss nicht so häufig eingestellt werden. Deswegen meine Idee mit dem AP und der html seite über smartphone. ich hoffe wirklich das mir da einer weiter helfen kann.

    Habe einen Shelly 1 Plus an 24V mit eigenem Code mit VSC und PlatformIO geflasht, was auch gut geklappt hat, leider wird der Schalter auf Sw nicht erkannt.

    Jetzt meine Frage: was habe ich falsch gemacht, laut Datenblatt vom SHelly 1 Plus sind es die richtigen Pins, zeihe auch Pin 4 auf GND.

    Falls noch weitere Infos zu klärung gebraucht werde kann ich gerne nachreichen

    Hier mein Code:

    Main.cpp:

    #include <WiFi.h>
    #include <WebServer.h>
    #include <WebSocketsServer.h>

    const char* ssid = "shellyAP";
    const char* password = "12345678";

    WebServer server(80);
    WebSocketsServer webSocket = WebSocketsServer(81);

    const int relayPin = 26; // GPIO26 für das Relais
    const int buttonPin = 4; // GPIO4 für den Schalter

    int threshold = 5;
    int counter = 0;
    int relayOnTimeSeconds = 420; // Zeit in Sekunden, die das Relais eingeschaltet bleibt (initial 7 Minuten)
    bool buttonPressed = false;
    bool lastButtonState = HIGH;
    const unsigned long debounceDelay = 50; // Millisekunden
    unsigned long lastDebounceTime = 0;

    void handleWebSocketMessage(void *arg, uint8_t *data, size_t len) {
    String msg = (char*)data;
    if (msg == "getStatus") {
    String status = "Zählerstand: " + String(counter);
    webSocket.broadcastTXT(status);
    }
    }

    void onWebSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) {
    switch (type) {
    case WStype_TEXT:
    handleWebSocketMessage(num, payload, length);
    break;
    default:
    break;
    }
    }

    void handleRoot() {
    int relayOnTimeMinutes = relayOnTimeSeconds / 60;
    String html = "<!DOCTYPE html><html><head>";
    html += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
    html += "<style>";
    html += "body { font-family: Arial, sans-serif; margin: 0; padding: 20px; }";
    html += "form { max-width: 400px; margin: auto; padding: 20px; border: 1px solid #ccc; border-radius: 10px; }";
    html += "input[type='number'] { width: 100%; padding: 10px; margin: 5px 0 20px 0; border: 1px solid #ccc; border-radius: 5px; }";
    html += "input[type='submit'] { width: 100%; padding: 10px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; }";
    html += "input[type='submit']:hover { background-color: #45a049; }";
    html += ".counter { text-align: center; margin-top: 20px; font-size: 20px; }";
    html += ".log { text-align: center; margin-top: 20px; font-size: 14px; white-space: pre-wrap; background-color: #f4f4f4; padding: 10px; border-radius: 5px; border: 1px solid #ccc; }";
    html += "</style>";
    html += "<script>";
    html += "var socket = new WebSocket('ws://' + window.location.hostname + ':81/');";
    html += "socket.onmessage = function(event) { document.getElementById('log').innerText += event.data + '\\n'; };";
    html += "function getStatus() { socket.send('getStatus'); }";
    html += "setInterval(getStatus, 1000);";
    html += "</script>";
    html += "</head><body>";
    html += "<h2>Konfiguration</h2>";
    html += "<form action=\"/set\" method=\"POST\">";
    html += "<label for=\"threshold\">Bei:</label>";
    html += "<input type=\"number\" id=\"threshold\" name=\"threshold\" value=\"" + String(threshold) + "\"><br>";
    html += "<label for=\"relay_on_time_minutes\">Einschaltzeit (Minuten):</label>";
    html += "<input type=\"number\" id=\"relay_on_time_minutes\" name=\"relay_on_time_minutes\" value=\"" + String(relayOnTimeMinutes) + "\"><br>";
    html += "<input type=\"submit\" value=\"Einstellung uebernehmen\">";
    html += "</form>";
    html += "<div class=\"counter\">Zaehlerstand: " + String(counter) + "</div>";
    html += "<div id=\"log\" class=\"log\"></div>";
    html += "</body></html>";
    server.send(200, "text/html", html);
    }

    void handleSet() {
    if (server.hasArg("threshold")) {
    threshold = server.arg("threshold").toInt();
    }
    if (server.hasArg("relay_on_time_minutes")) {
    relayOnTimeSeconds = server.arg("relay_on_time_minutes").toInt() * 60;
    }
    server.sendHeader("Location", "/");
    server.send(303);
    }

    void setup() {
    Serial.begin(115200);
    Serial.println("Setup started");

    pinMode(relayPin, OUTPUT);
    pinMode(buttonPin, INPUT_PULLUP);

    WiFi.softAP(ssid, password);

    server.on("/", handleRoot);
    server.on("/set", HTTP_POST, handleSet);
    server.begin();

    webSocket.begin();
    webSocket.onEvent(onWebSocketEvent);

    Serial.println("Setup completed");
    }

    void loop() {
    server.handleClient();
    webSocket.loop();

    int reading = digitalRead(buttonPin);

    if (reading != lastButtonState) {
    lastDebounceTime = millis();
    }

    if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading == LOW && !buttonPressed) {
    buttonPressed = true;
    } else if (reading == HIGH && buttonPressed) {
    buttonPressed = false;
    counter++;
    Serial.println("Button pressed, counter: " + String(counter));
    webSocket.broadcastTXT("Button pressed, counter: " + String(counter));
    if (counter >= threshold) {
    digitalWrite(relayPin, HIGH);
    Serial.println("Relay turned on");
    webSocket.broadcastTXT("Relay turned on");
    delay(relayOnTimeSeconds * 1000);
    digitalWrite(relayPin, LOW);
    Serial.println("Relay turned off");
    webSocket.broadcastTXT("Relay turned off");
    counter = 0;
    }
    }
    }

    lastButtonState = reading;
    }

    Hier PlatformIO.ini:

    [env:esp32dev]

    platform = espressif32

    board = esp32dev

    framework = arduino

    lib_deps =

    arduinoWebSockets

    HTTPClient

    links2004/WebSockets@^2.4.1

    monitor_speed = 115200Bitte

    BBitte

    B

    Hallo

    Habe folgends Cenario:

    Ein Motor wird über eine seperate Steuerung über den Tag hinweg angeschaltet. Ich möchte jetzt mit dem Shelly 1 Plus einen anderen Motor einschalten und diese Einschaltzeiten über ein script per Bluetooth und Weboberfläche ändern können.

    Das Script soll das Einschalten des Hauptmotor zählen und dann bei erreichen eines Zählwertes den anderen Motor für eine gewissen Zeit einschalten. Da es sich um flexible einschalt zeiten handeln (Mal 6x pro Tag, mal 10x am Tag) und der Nebenmotor nur die letzte

    pro tag eingeschaltet werden soll muss man das Script anpassen können, im ideal Fall über Blutooth per webui am Smartphone, da kein WLan zuverfügung steht.

    Da es für mich hier völliges Neuland ist, würde ich mich über Eure Vorschläge oder Beispiele freuen.

    DirtyHaerry