Danke für die Antwort! Mir geht es ja nur darum ob die MQTT Verbindung erfolgreich war. Das sollte also funktionieren?
Beiträge von steve_1992
-
-
Guten Tag,
ich habe eine technische Frage zum Thema Shellys.
Gibt es ein Problem, wenn ich an die Shellys keine "Last" bzw. keinen Verbraucher anschließe, wie z. B. LED-Streifen, 0-10V-Geräte oder Ähnliches? Das bedeutet, ich möchte die Shellys lediglich an den Strom anschließen, um sie mit dem WLAN zu verbinden, den MQTT-Server einzutragen und ggf. eine Testansteuerung durchzuführen, um zu überprüfen, ob der einzelne Shelly per MQTT erreichbar ist. In den Anleitungen der einzelnen Shellys habe ich dazu keine genauen Informationen gefunden. Die Einrichtung passend zum Verbraucher erfolgt dann nach erfolgreicher Verkabelung.
Konkret geht es um folgende Shellys:
Tastschaltung 230V:
- Shelly Plus 2PM
- Shelly Dimmer 0-10V GEN3
- Shelly 1 GEN3
- Shelly 2PM GEN3
- Shelly Plus 1
- Shelly Dimmer2
- Shelly DALI Dimmer GEN3
Testschaltung 24V:
- Shelly Plus RGBW PM
- Shelly RGBW2
- Shelly Plus i4DC
- Shelly 1 GEN3
- Shelly Uni Plus
Viele Grüße!
-
-
Guten Abend,
ich habe alles erfolgreich erledigt. Für diejenigen, die es interessiert, hier ist das Skript. Nochmals vielen Dank für die Unterstützung!
Code
Alles anzeigen// Veränderliche Attribute var resetTime = "02:00"; // Reset-Zeit im Format "HH:MM" var nachlaufzeitSekunden = 10; // Nachlaufzeit in Sekunden für das Ausschalten des Lichtrelais var LichtrelaisIP = "xxx.xxx.xxx.xx"; // IP-Adresse des Lichtrelais var LichtrelaisOnURL = "http://" + LichtrelaisIP + "/relay/0?turn=on"; // URL zum Einschalten des Lichtrelais var LichtrelaisOffURL = "http://" + LichtrelaisIP + "/relay/0?turn=off"; // URL zum Ausschalten des Lichtrelais var ServerURL = "https://xyz.de/post"; // Ziel-URL für das Senden der KVS-Werte per HTTP POST // Initialisierung der Variablen var Eingehende_Personen = 0; var Ausgehende_Personen = 0; var Gesamt_Personen = 0; var lastGesamtPersonen = null; // Variable zum Speichern des letzten Wertes von Gesamt_Personen var LichtrelaisEingeschaltet = false; // Variable zum Verfolgen des Zustands des Lichtrelais var ausschaltTimer = null; // Timer für das Ausschalten des Lichtrelais // Extrahiere Stunde und Minute aus der Reset-Zeit var resetHour = parseInt(resetTime.split(":")[0], 10); var resetMinute = parseInt(resetTime.split(":")[1], 10); // Funktion zum Abrufen der Werte aus dem KVS und Initialisierung Shelly.call("KVS.Get", { key: "Eingehende_Personen" }, function(result, error_code, error_message) { if (error_code === 0 && result.value !== null) { Eingehende_Personen = parseInt(result.value); } Shelly.call("KVS.Get", { key: "Ausgehende_Personen" }, function(result, error_code, error_message) { if (error_code === 0 && result.value !== null) { Ausgehende_Personen = parseInt(result.value); } Gesamt_Personen = Eingehende_Personen - Ausgehende_Personen; lastGesamtPersonen = Gesamt_Personen; // Initialisieren der Vergleichsvariable }); }); // Funktion zum Zurücksetzen der Werte im KVS function resetKVSValues() { Gesamt_Personen = 0; Eingehende_Personen = 0; Ausgehende_Personen = 0; // KVS-Werte nacheinander zurücksetzen Shelly.call("KVS.Set", { key: "Eingehende_Personen", value: Eingehende_Personen.toString() }, function(result, error_code, error_message) { if (error_code === 0) { print("Eingehende_Personen erfolgreich zurückgesetzt."); Shelly.call("KVS.Set", { key: "Ausgehende_Personen", value: Ausgehende_Personen.toString() }, function(result, error_code, error_message) { if (error_code === 0) { print("Ausgehende_Personen erfolgreich zurückgesetzt."); Shelly.call("KVS.Set", { key: "Gesamt_Personen", value: Gesamt_Personen.toString() }, function(result, error_code, error_message) { if (error_code === 0) { print("Gesamt_Personen erfolgreich zurückgesetzt."); lastGesamtPersonen = Gesamt_Personen; // Aktualisieren des letzten Wertes print("Alle Werte wurden um " + resetTime + " Uhr auf 0 zurückgesetzt."); } else { print("Fehler beim Zurücksetzen von Gesamt_Personen: " + error_message); } }); } else { print("Fehler beim Zurücksetzen von Ausgehende_Personen: " + error_message); } }); } else { print("Fehler beim Zurücksetzen von Eingehende_Personen: " + error_message); } }); } // Funktion zum Senden des KVS-Werts "Gesamt_Personen" an eine externe URL function sendKVSValueToServer(kvsValue) { if (kvsValue !== lastGesamtPersonen) { // Nur senden, wenn sich der Wert geändert hat Shelly.call("HTTP.POST", { url: ServerURL, body: JSON.stringify({ Gesamt_Personen: kvsValue }), headers: { "Content-Type": "application/json" } }, function(result, error_code, error_message) { if (error_code === 0) { print("KVS-Wert wurde an den Server gesendet: " + kvsValue); lastGesamtPersonen = kvsValue; // Aktualisieren des zuletzt gesendeten Werts } else { print("Fehler beim Senden des KVS-Werts an den Server: " + error_message); } }); } } // Funktion zum Steuern des Lichtrelais basierend auf dem KVS-Wert "Gesamt_Personen" function controlLichtrelais(kvsValue) { if (kvsValue > 0) { if (!LichtrelaisEingeschaltet) { // Nur einschalten, wenn das Relais aktuell ausgeschaltet ist Shelly.call("HTTP.GET", { url: LichtrelaisOnURL }, function(result, error_code, error_message) { if (error_code === 0) { print("Lichtrelais wurde eingeschaltet."); LichtrelaisEingeschaltet = true; // Zustand aktualisieren } else { print("Fehler beim Einschalten des Lichtrelais: " + error_message); } }); } // Falls ein Ausschalt-Timer läuft, wird er hier abgebrochen if (ausschaltTimer !== null) { Timer.clear(ausschaltTimer); ausschaltTimer = null; print("Ausschalt-Timer wurde abgebrochen, da Personen gezählt wurden."); } } else { if (LichtrelaisEingeschaltet && ausschaltTimer === null) { // Nur ausschalten, wenn das Relais aktuell eingeschaltet ist und kein Timer läuft print("Gesamt Personen ist 0, Lichtrelais wird in " + nachlaufzeitSekunden + " Sekunden ausgeschaltet."); ausschaltTimer = Timer.set(nachlaufzeitSekunden * 1000, false, function() { Shelly.call("HTTP.GET", { url: LichtrelaisOffURL }, function(result, error_code, error_message) { if (error_code === 0) { print("Lichtrelais wurde ausgeschaltet."); LichtrelaisEingeschaltet = false; // Zustand aktualisieren } else { print("Fehler beim Ausschalten des Lichtrelais: " + error_message); } }); ausschaltTimer = null; // Timer zurücksetzen }); } } } // Funktion zum Zählen der eingehenden Personen Shelly.addStatusHandler(function(event) { if (event.component === "input:0" && event.delta.state === true) { Eingehende_Personen += 1; Gesamt_Personen = Eingehende_Personen - Ausgehende_Personen; // Speicherung der neuen Werte im KVS nur, wenn sich etwas geändert hat if (Gesamt_Personen !== lastGesamtPersonen) { Shelly.call("KVS.Set", { key: "Eingehende_Personen", value: Eingehende_Personen.toString() }); Shelly.call("KVS.Set", { key: "Gesamt_Personen", value: Gesamt_Personen.toString() }); print("Gesamt Personen: " + Gesamt_Personen); sendKVSValueToServer(Gesamt_Personen); controlLichtrelais(Gesamt_Personen); // Lichtrelais steuern basierend auf dem neuen Wert } } }); // Funktion zum Zählen der ausgehenden Personen Shelly.addStatusHandler(function(event) { if (event.component === "input:1" && event.delta.state === true) { Ausgehende_Personen += 1; Gesamt_Personen = Eingehende_Personen - Ausgehende_Personen; // Speicherung der neuen Werte im KVS nur, wenn sich etwas geändert hat if (Gesamt_Personen !== lastGesamtPersonen) { Shelly.call("KVS.Set", { key: "Ausgehende_Personen", value: Ausgehende_Personen.toString() }); Shelly.call("KVS.Set", { key: "Gesamt_Personen", value: Gesamt_Personen.toString() }); print("Gesamt Personen: " + Gesamt_Personen); sendKVSValueToServer(Gesamt_Personen); controlLichtrelais(Gesamt_Personen); // Lichtrelais steuern basierend auf dem neuen Wert } } }); // Funktion zum Zurücksetzen der Werte um die angegebene Uhrzeit function resetValuesIfNeeded() { var currentTime = new Date(); var currentHour = currentTime.getHours(); var currentMinute = currentTime.getMinutes(); if (currentHour === resetHour && currentMinute === resetMinute) { resetKVSValues(); } } // Periodisches Überprüfen und Zurücksetzen der Werte, wenn nötig (alle 60 Sekunden) Timer.set(60000, true, function() { resetValuesIfNeeded(); });
-
Vielen Dank für deine fachkundigen Antworten und Vorschläge.
Als Anfänger im Umgang mit Shelly wäre für mich wahrscheinlich die einfachste Lösung, den Count-Eingang zu entprellen. Dabei stellt sich jedoch die Frage, ob es möglich ist, zwei Count-Eingänge in einer Szene so zu vergleichen, dass das Licht entsprechend gesteuert wird. Was ich mit meinem Grundwissen in Elektrik noch nicht ganz verstehe, ist, dass ich dadurch doch Spannung auf den potenzialfreien Kontakt lege, was in der Anleitung des Drehkreuzes ausdrücklich untersagt wird – oder liege ich da falsch?
-
Hallo, danke für die Antwort.
Ich habe jetzt NO auf IN1 (Orange)) geklemmt und COM auf GND (grün). Jetzt schaltet sich bei einer Umdrehung OUT 1 ein bzw. aus. Es erfolgt aber keine Zählung der Umdrehungen.
-
Sooo, ich habe es geschafft!
Der Counter 1 zählt in die linke Drehrichtung.
Der Counter 2 zählt in die rechte Drehrichtung.
NO gegen COM gibt einen potenzialfreien Kontakt von ca. 1 Sekunde pro Umdrehung aus.
NC gegen COM unterbricht den dauerhaften Durchgang für ca. 1 Sekunde pro Umdrehung.
Der 12V gibt nur Dauerspannung aus. Dort ändert sich nichts an der Spannung bei einer Umdrehung.
Ich habe jetzt NO auf COUNT IN (lila) geklemmt und COM auf GND (grün). Der Shelly zählt dann zwischen 1 und 6 Impulse. Bisher habe ich noch keine Möglichkeit gefunden, pro Umdrehung nur eine Zählung durchzuführen, egal welche Werte ich einstelle. Habt ihr vielleicht eine Idee?
Ziel ist es, am Ende die Personenanzahl auszulesen welche im Studio ist und über die API abzurufen sowie ggf. das Licht zu schalten. Wenn also 1 Umdrehung mehr rein als raus ist, bleibt das Licht an. Dafür müsste ich dann zwei Shelly Uni Pro nutzen, was kein Problem darstellt. Der eine zählt die Linksumdrehung, der andere die Rechtsumdrehung.
Shelly Uni Plus Schaltplan:
-
Guten Tag zusammen,
Entschuldigt bitte die verspätete Antwort. Vielen Dank für eure zahlreichen Kommentare! Ich werde in den nächsten Tagen die Ausgänge messen und euch die Ergebnisse mitteilen, die ich feststellen konnte.
Herzliche Grüße,
Steve
-
Hallo, gerne möchten wir Shelly-Module benutzen, um Werte des Zählers in einem Drehkreuz für Funktionen in der Shelly-Cloud zu nutzen (z. B. Licht, Radio)?
Wir haben am Mainboard des Drehkreuzes zwei Counter-Ausgänge (siehe Anhang). Was meint ihr, kann man diese Werte mit einem Shelly erfassen und zur Steuerung nutzen? Im Anhang ein Bild vom Mainboard und die Betriebsanleitung.
-
Danke für die schnelle Antwort! Die Leistungsaufnahme beträgt 135W, also ca. 0,6A. Der Anlaufstrom wird sicher etwas höher sein. Das habe ich mir schon fast gedacht! Deshalb war meine Idee, den Shelly so zu schalten, dass Kanal 1 immer geschlossen ist, wenn Kanal 2 geöffnet ist. Ich bin mir nicht sicher, ob das technisch (sicher) umsetzbar ist. Den SHELLY Temperatur- und Feuchtigkeitssensor Blu H&T kann ich mit dem Shelly Pro3 nicht per Bluetooth verbinden? Dann werde ich den Shelly Pro Dual Cover PM nutzen! Herzlichen Dank.
-
Hallo, ich habe einen Shelly Pro 3 und möchte diesen nutzen, um einen Fensterantrieb (Micro 02 Mingardi Kettenantrieb 230V Fenstermotor) zu steuern und einen Lüfter zu betreiben. Das Ganze soll temperaturabhängig gesteuert werden. Dafür möchte ich den SHELLY Temperatur- und Feuchtigkeitssensor Blu H&T nutzen. Bei Temperaturen über 21 Grad soll das Fenster geöffnet werden und der Lüfter anspringen, damit eine Querlüftung gegeben ist. Den Lüfter kann ich direkt über einen Schaltausgang ansteuern.
Der Fensterantrieb muss zum Öffnen über Kanal 3 und zum Schließen über Kanal 2 bestromt werden. Wie setze ich das am besten in der Shelly Cloud um? Im Anhang ein "Schaltplan" vom Hersteller des Fensterantriebes. Ich habe nur eine Phase zur Verfügung. Kann ich diese dann von I1 zu I2 zu I3 brücken?
Vielen Dank für eure Hilfe!