Es gibt keine Schaltpläne der Shellies. Die muß man sich rauszeichnen („Reverse Engineering“).
Ok.
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.
Es gibt keine Schaltpläne der Shellies. Die muß man sich rauszeichnen („Reverse Engineering“).
Ok.
ZitatDas würde die Situation nicht wesentlich verändern. Die Crux sind die langsamen Dioden. Ein Überspannungsschutz in Gestalt eines VDR ist übrigens vorhanden. Bekanntlich sind die Dinger auch nicht die schnellsten…
Gibt es einen Schaltplan von der Gen. 4?
Aus dem restlichen Stromnetz bei dir. Hast du ggf. an anderer Stelle konventionelle Leuchtstoffröhre mit KVS installiert? Oder im gleichen Stromkreis einen leistungsstarken Motor/Kompressor der häufig ausschaltet?
Also einen Kompressor gibt es, der steht in einer anderen Garage das sind schon ein paar Meter.
Leuchtstoffröhren gibt es keine mehr.
Wenn es Rückkopplungen geben sollte, wieso dann nicht bei den anderen Shellys? Vielleicht sind die "LED Spots" auch einfach nur Schrott.
Allem Anschein nach ist einer der Hochvolt-Elkos aufgebläht. Das lässt darauf schließen, daß das Bauteil Netzwechselspannung abgekriegt hat, was immer dann passiert, wenn die Gleichrichter-Diode durchlegiert. In Folge dessen werden der/die HV-Elkos beschädigt und die Spule zwischen beiden Elkos brennt durch. Wenn es ganz schlimm kommt, wird der primäre Step-Down-Converter (BP2522) durch die negative Halbwelle defekt. Weil dessen Body-Diode den gesamten Strom in der negativen Halbwelle übernehmen muß, platzt häufig das Bauteil.
Super Erklärung. Ich habe mir wirklich gefragt warum immer dieser "eine" Elko.. Macht total Sinn was Du schreibst.
Ich kenne die Schaltung nicht genau aber es sieht für mich aus als währe es nur eine einfache Gleichrichtung, sprich eine Diode.
Man hätte für ein paar Cents mehr lieber einen kleinen Brückengleichrichter nehmen können oder entsprechend vier Dioden.
Da wirklich nur Spots dahinter hängen und sonst weiter nichts, frage ich mich wirklich wo diese "Spikes" her kommen.
Würde vielleicht eine Suppressor Diode direkt vor dem o.g. BP2522 Sinn machen?
Gruß Jan.
Wieviele sind es? Und immer mit dem gleichen Fehler in der gleichen Installation?
Machst du uns bitte mal eine Skizze + Fotos deiner Installation.
Ja es passiert immer an dieser Stelle. Jahrelang davor hatte ich ein Aktor von der Firma Jung mit der gleichen Verdrahtung, ohne jegliche Probleme!
Ich möchte behaupten es liegt nicht an der Verdrahtung.
Ein Shelly 1PM Gen4 ?
Auweiha. Danke! Ja genau der.
und schon wieder der nächste Shelly 1PM Gen. 4 der den Geist aufgegeben hat. Das Gerät ist keine 3 Monate alt. Es ist unterdach, in einer APD liebevoll verstaut. Wärme und Feuchtigkeit spielen keine Rolle, alles im Bereich des normalen.
Im Gegensatz zu den anderen Generationen hat Shelly ein wenig etwas am Netzteil (Schaltregler) verändert.
Achso, es werden lediglich 8 LED´s (230 Volt) geschalten.
Strom, Spannung und Leistung sind schon runtergeschraubt (in der Software)..
Ich bin echt Ratlos und langsam richtig enttäuscht.
Meine anderen 4 Shellys ( 2PM ) sind jetzt schon seit knapp 8 Monaten im Einsatz und nie probleme mit gehabt.
hier mein ansatz, vielleicht hilft es ja jemand:
Code Alles anzeigenlet globalVars = { time: '0:00' }; function getLocalTime(){ Shelly.call("Shelly.GetStatus", {}, function (res, error_code, error_msg, gv) { if(typeof error_code === 'number' && error_code !== 0) return; if(typeof res === 'undefined') return; if(typeof res.sys !== 'undefined' && typeof res.sys.time === 'string' && res.sys.time.length > 4 && chr(res.sys.time.at(2)) === ':'){ globalVars.time = res.sys.time; //print("Lokale Zeit: " , globalVars.time); } }, globalVars ); } //ein timer holt die zeit aus dem shelly status let tmrTmpLoader = Timer.set(5000, false, function(){ getLocalTime(); }); //die zeit ist dann also in der globalen variable 'globalVars.time' und wird alle 5s aktualisiert //die folgenden routinen (getHour und getMinute) benutze ich dann für weitere abläufe (im code stehen die routinen eher weit oben) function replace(origin, substr, replace) { return origin.slice(0, origin.indexOf(substr)) + replace + origin.slice(origin.indexOf(substr) + substr.length, origin.length) } function getHour(timeString){ return JSON.parse(timeString.slice(0, timeString.indexOf(':'))); } function getMinute(timeString){ return JSON.parse(timeString.slice(timeString.indexOf(':')+1)); }
Dabei verlasse ich mich darauf, dass der Shelly seine lokale Zeit sauber führt und behalte so alles lokal.
Ein Zugriff auf externe Webseiten, um die Zeit zu holen, ist für meinen Zweck wiederum zu aufwendig und ggf. anfällig. Aber das kommt ganz auf den Einsatzzweck an.
Schöner wäre es natürlich, wenn man die Zeit einfach in irgendeiner globalen Variable hätte, ohne dass man sich dafür verrenken muss.
Hallöchen,
habe gerade mal deinen Code auf meinen Shelly gepackt, funzt wunderbar
Man kann doch sicherlich auch das Datum noch mit parsen?
Hallo,
ich habe mich gefragt warum eine Abfrage nicht richtig funktioniert, bis ich mal ein paar Debugs eingebaut habe.
Dort ist mir aufgefallen das die Uhrzeit nicht aktualisiert wird, genauer gesagt die Stunden.
Das Script habe ich um 11 Uhr gestartet. Es soll mir zyklisch ein paar Informationen anzeigen. Nun ist es schon 12 Uhr und mir wird immer noch 11 Uhr angezeigt.
Die Minuten passen..
Ist das ein Bug der Funktion oder mache ich etwas falsch?
// Konfiguration
let CHECK_INTERVAL = 10; // Sekunden
let LOW_TEMP_TRIGGER = 23.0; // °C
let HIGH_TEMP_THRESHOLD = 25.0; // °C (Wird genutzt, um "heiß" zu markieren)
let wasHot = false;
let actionDone = false;
let temp = 0.0;
const HOUR_TO_SHUT_DOWN = 21;
const MINUTE_TO_SHUT_DOWN = 20;
const DateDetection = new Date();
let DayOfLastHotDetection = DateDetection.getDay();
const CoverURL= [
"http://192.168.178.181/rpc/Cover.GoToPosition?id=0&pos=50", //Badezimmer
"http://192.168.178.184/rpc/Cover.GoToPosition?id=0&pos=50", // Schlafzimmer
"http://192.168.178.182/rpc/Cover.GoToPosition?id=0&pos=50", // Wohnzimmer - großes Fenster
"http://192.168.178.180/rpc/Cover.GoToPosition?id=0&pos=50"
]; // Wohnzimmer - kleines Fenster];
// Rollladensteuerung (HTTP-Request an anderes Gerät)
function rolladenRunter() {
print("→ Rolllaeden werden heruntergefahren.");
for( let i = 0; i < CoverURL.length; i++ )
{
let msg = "Ausgefuehrt: ";
msg += CoverURL[i];
console.log(msg);
Shelly.call("http.get", { url: CoverURL[i] }, function (response){
});
}
actionDone = true;
}
// Temperatur prüfen Funktion
function checkTemp()
{
Shelly.call(
"HTTP.GET",
{ url: "http://192.168.178.107/rpc/Temperature.GetStatus?id=100"}, // Call to other Shelly
function(result, error_code, error_message) {
if (error_code !== 0) {
print("Fehler beim auswerten der Temperatur");
}
else {
let jsonData = JSON.parse(result.body);
let tempHome = jsonData.tC;
temp = tempHome;
}
});
let Hour = DateDetection.getHours();
let Minute = DateDetection.getMinutes();
if(DayOfLastHotDetection != DateDetection.getDay()){
DayOfLastHotDetection = 0;
console.log("Datum der letzten Erkennung eines heißen Tages wurde zurückgesetzt..");
}
// Prüfen ob es vorher heiß genug war
if (temp >= HIGH_TEMP_THRESHOLD) {
wasHot = true;
print("Temperatur war heiß genug – Zustand gemerkt.");
if(DayOfLastHotDetection != DateDetection.getDay()){
DayOfLastHotDetection = DateDetection.getDay();
actionDone = false;
print("Datum der letzten Erkennung eines heißen Tages wurde aktualisiert..");
}
}
// Prüfen ob der Trigger aktiviert werden soll
if (wasHot && temp <= LOW_TEMP_TRIGGER && !actionDone && Hour >= HOUR_TO_SHUT_DOWN && Minute >= MINUTE_TO_SHUT_DOWN ) {
print("Temperatur ist gefallen – Trigger wird ausgelöst.");
//rolladenRunter();
wasHot = false; // Nachdem die Rollaeden heruntergefahren sind, sollen sie erst bei erneueten erreichen der HIGH_TEMP_THRESHOLD wieder mit dem Script verfahren
}
// Optional: Hinweis, falls schon ausgelöst oder Bedingungen nicht erfüllt sind
if (temp <= LOW_TEMP_TRIGGER && actionDone) {
print("Temperatur unter Schwellwert und Aktion bereits ausgeführt.");
}
let msg = "aktuelle Temperatur: ";
msg += temp;
console.log(msg)
msg = "letzter Tag an dem die Temperatur über HIGH_TEMP_THRESHOLD lag, war am ";
msg += DayOfLastHotDetection;
msg += " Tag der Woche..";
print( msg);
msg = "aktuelle Systemzeit ist ";
msg += DateDetection.toString();
print(msg);
msg = "actionDone ->";
msg += actionDone;
console.log(msg);
msg = "wasHot ->";
msg += wasHot;
console.log(msg);
msg = "Hour >= HOUR_TO_SHUT_DOWN ->";
msg += Hour >= HOUR_TO_SHUT_DOWN;
print(msg);
msg = "Minute >= MINUTE_TO_SHUT_DOWN ->";
msg += Minute >= MINUTE_TO_SHUT_DOWN;
print(msg);
print(DateDetection.getHours())
}
// Timer starten
Timer.set(CHECK_INTERVAL * 1000, true, checkTemp);
// Initiale Prüfung
checkTemp();
Hallo,
was mache ich falsch?
Die Rolläden lassen sich alle Verfahren wenn ich es via. Hand Befehle. Die Temperatur passt auch.
Sonnige Grüße
Vielen Dank!
Ich komme eher aus der embedded Richtung.
Und wenn ich in einer Schleife das ganze Abfragen will, kann man das so machen?
function readTemperatureSensor(callback, ip_addr) {
Shelly.call(
"HTTP.GET",
{ url: "http://" + ip_addr +"/rpc/Temperature.GetStatus?id=100" },
function (result, error_code, error_message) {
if (error_code !== 0) {
callback(null, error_message); // Fehler an den Callback weitergeben
} else {
try {
let jsonData = JSON.parse(result.body);
callback(jsonData.tC, null); // Erfolg an den Callback weitergeben
} catch (e) {
callback(null, "JSON-Parsing-Fehler: " + e.message); // Parsing-Fehler
}
}
}
);
}
function loop()
{
readTemperatureSensor(function (myTemp, error_message)
{
if (error_message)
{
print("Fehler: " + error_message);
} else
{
print("Die Außentemperatur beträgt: " + myTemp + " °C");
}
}, "192.168.178.70");
}
Timer.set(10000,true, loop);
Alles anzeigen
Alles klar, die Kommunikationj ist von Shelly zu Shelly aber nicht z.B. vom raspberry zu Shelly oder umgekehrt, richtig?
Von Shelly zu Shelly
Ja Temperatur bekomme ich ja vom Script an der Stelle : 20
Nur die Rückgabe zur Hauptfunktion funzt nicht..
Die Rückgabe wird ja nur an die Callback Funktion übergeben und dann nicht weiter..
Alles anzeigenEin einfaches Beispiel:
Codefunction ichBinEineFunktionMitRueckgabe() { let temp = 60; // Die Variable wird 60 zugewiesen return temp; } // Aufruf der Funktion: let wieIstTemp = ichBinEineFunktionMitRueckgabe(); print("Die Temperatur ist: " + wieIstTemp + " °C");
Um die Funktion aufzurufen musst du nach der function definition ein Aufruf schreiben.
let wieIstTemp = ichBinEineFunktionMitRueckgabe();
--------------
Shelly A mit dem AddOn + Temperaturfühler hat die IP 192.168.178.155
Der Shelly B hat die IP 192.168.178.150Auf Shelly B wird das Script Ausgeführt. Das Script Besteht aus einer Funktion -> function {...}. wie das einfache Beispiel Script.
Über die URL werden die Daten vom Shelly A am AddOn ausgelesen -> Rückgabe ist ein JSON Datei.
Aus der wird dann die Temperatur extrahiert.Die Funktion hat außerdem ein return Aufruf: Der gibt dir den Wert, in diesem Fall Temp als Zahl zurück. Wie das einfache Beispiel Script.
Wenn du nun auf Shelly B die Temperatur auf Shelly A abfragen willst musst du unter der function
den Aufruf ausführen.
let myTemp = readTemperaturSensor();
myTemp enthält nun den Temp Wert.
Das Script nochmal alles zusammen:Code Alles anzeigenfunction readTemperaturSensor() { //print ("readTemperaturSensor..."); Shelly.call( "HTTP.GET", { url: "http://192.168.178.155/rpc/Temperature.GetStatus?id=100" }, // IP von Shelly mit AddOn function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let jsonData = JSON.parse(result.body); let tempHome = jsonData.tC; //print ("Temp Home: " ,tempHome); return tempHome; // <--- RÜCKGABE <---- } }); } let myTemp = readTemperaturSensor(); // Funktion aufrufen mit Rückgabewert print("Die Zimmertemperatur ist: " + myTemp + " °C");
Irgendwas passt mit dem Rückgabewert nicht. Ich bekomme ein "undefined"..
Siehe Foto.
Mal anders gefragt, was soll denn das jetzt bezwecken? Oder geht es darum eine Aktion an einem anderen Shelly bei einer bestimmten Temperatur auszulösen? Das geht einfach mit einer Szene.
An einem Shelly ist das AddOn gesteckt. In anderen Räumen mit anderen Shellys möchte ich von diesem AddOn die Temperatur haben und danach halt interagieren.
**UPDATE**
Habe es gerade im Szenen Modus gefunden und eingestellt, mal schauen ob das funktioniert. Vielen Dank für den Hinweis!
Hallo Forum,
ich bin gerade sehr neu in der Shelly Welt und habe direkt mal eine Frage.
An einem Shelly habe ich eine AddOn Erweiterung angeschlossen mit einem Temperatur Sensor.
In der App kann ich die Temperatur auch schon sehen.
Nun meine Frage: Da ich mehrere Shellys im selben Netzwerk habe und ich diese Temperatur auch an den anderen Shellys brauche und ich denke mal nicht für jeden Shelly einen AddOn mit Temperatursenso
benötige, kann man das sicherlich anhand von Scripten lösen oder?
Wie kann ich auf einem anderen Shelly der dieses AddOn nicht besitzt die Temperatur von dem Shelly auslesen der dieses AddOn besitzt?
Grüße Jan.