Hi,
kannst du mir erklären wie dieser Snubber anzuschließen ist?
Einer war aus der Garantie raus, der 2. müsste noch drin sein. Den kann ich dir gerne mal zuschicken
Beiträge von spike78
-
-
Hi Leute,
ich bin derzeit dabei mir eine Heizstab-Steuerung über Shelly zu realisieren. Es ist ein 6KW Heizstab im Einsatz.Möchte ich nutzen um mit PV Überschuß meinen Pufferspeicher aufzuheizen.
Jede Phase wird über einen Shelly 1PM angesteuert. Da ich ich die Phasen des Heizstabes nicht direkt an den Shelly anschließen wollte (wegen zu hoher Last), habe
ich drei Relais dazwischen geschaltet.
Das funktioniert soweit, nur ist mir nun schon 2 mal ein Shelly hops gegagenen. Zumindest wird er mir als offline angezeit und
ich kann ihn nicht wiederbeleben
An der Last kann es ja nicht liegen, der Shelly gibt ja nur die Steuerspannung an das Relais weiter und an dem liegen dann die 2 KW an.
Allerdings habe ich zu Beginn, in der Testphase, die Takthäufigkeit ziemlich niedrig gehalten. Der PV Überschuß wurde alle 10 Sekunden gemessen und dann halt entsprechend die Shellys geschaltet.
Ich denke das waren zuviele Schaltvorgänge. Je nach Wetter wurde dann alle 10 Sekunden der Shelly ein/ausgeschaltet.
Was denkt ihr ?
GrußSpike
-
super, vielen Dank. Scheint zu funktionieren
-
Hi Leute,
ich bin noch Anfänger und derzeit dabei mir ein Script zu schreiben, das folgendes tut:
- Ich meiner Funktion getPowerConsumption ermittele ich mir an meinem 3em den Stromverbrauch von meinem Haus
- Innerhalb dieser Funktion rufe ich die Funtkion getTankTemperature auf um mir die Temperatur meines Pufferspeichers zu ermitteln
- Das mache ich mit Shelly.call. Ich weiß das diese Funtion asyncrhon arbeitet und derweil getPowerConsumption weiterläuft. Wie kann ich das umgehen?
Ich habe Posts gesehen die mit Timer arbeiten, aber das hat irgendwie alles nicht funktioniert.
- Das mache ich mit Shelly.call. Ich weiß das diese Funtion asyncrhon arbeitet und derweil getPowerConsumption weiterläuft. Wie kann ich das umgehen?
Das hier ist mein Script:
Code
Alles anzeigen//############################## Config ############################ let Config = { interval : 5 // 2 seconds is the minimum interval } let tanktemp; // Konfiguration des Shelly-Geräts const shellyIP = '127.0.0.1'; // Funktion zum Abrufen der Speichertemperatur function getTankTemperature() { Shelly.call( "HTTP.GET", { url: "http://192.168.178.27/rpc/Temperature.GetStatus?id=101" }, function(result, error_code, error_message) { if (error_code !== 0) { print('Error'); } else { let jsonData = JSON.parse(result.body); let temperatureCelsius = jsonData.tC; tanktemp = temperatureCelsius; console.log('Speichertemperatur:', tanktemp); } } ); } // Funktion zum Abrufen des Stromverbrauchs function getPowerConsumption() { try { //hole Speichertemperatur ab getTankTemperature(); console.log('Speichertemperatur', tanktemp ); const response = Shelly.getComponentStatus("em:0"); const totalActPowerStr = response.total_act_power; let totalActPower = parseFloat(totalActPowerStr); const pwerPhaseA = parseFloat(response.a_act_power); const pwerPhaseB = parseFloat(response.b_act_power); const pwerPhaseC = parseFloat(response.c_act_power); console.log('Total Active Power (Number):', totalActPower ); //console.log('Power Phase A:', pwerPhaseA, 'W' ); //console.log('Power Phase B:', pwerPhaseB, 'W' ); //console.log('Power Phase C:', pwerPhaseC, 'W' ); if (totalActPower > -2000) { console.log('Phase 1,2,3 OFF'); } else if (totalActPower >= -3000 && totalActPower <= -2000) { console.log('Phase 1 ON'); console.log('Phase 2 OFF'); console.log('Phase 3 OFF'); } } catch (error) { console.error('Fehler beim Abrufen des Stromverbrauchs:', error.message); } } function start() { getPowerConsumption(); Timer.set(Config.interval * 1000,true,getPowerConsumption); } // schedule script start for 1 second Timer.set(1000,false,start);
Ich möchte das zuerst die Temperatur ermittelt wird und dann der Stromverbrauch?
Könnt ihr mir helfen?
Danke u. Gruß
Spike
-
Gestern lief es mal ohne Probleme was ich so beobachten konnte, oder hast du schon einen Fehler entdeckt im Script?
-
So, hier mal mein überarbeitetes Script:
Kurz zur Funktion. Habe einen Shelly Plus1PM mit einem Addon und zwei Temp. Fühler. Einer geht in den Kamin und einer in den Speicher. Das Script soll folgendes tun:
- Wenn die Kamintemp. > 65 Grad ist, gehe in die Prüfung
- wenn das Delta (Kamin - Speicher) >= 8 Grad hat, dann schalte die Pumpe an
- wenn das Delta unter 4 Grad liegt, schalte die Pumpe wieder ab
- (hier könnte ich noch prüfen ob die Pumpe bereits aus ist, beim Anheizen ist das ja der Fall )
- Dann noch eine Sicherung falls oben was schief geht, wenn Kamintemp. > 80 Grad, schalte die Pumpe an
Code
Alles anzeigen//GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 //More information: https://www.gnu.org/licenses/gpl-3.0.txt //ABSOLUTELY NO WARRANTY!!! //Made by Ostfriese //############################## Config ############################ let Config = { temp_diff : 8, temp_diff_off: 4, temp_min : 65, temp_max : 80, id_kamin : 100, id_speicher: 101, relay : 0, interval : 10 // 2 seconds is the minimum interval } //############################## Config end ############################ function watch() { try { temp_kamin = Shelly.getComponentStatus('Temperature', Config.id_kamin).tC; temp_speicher = Shelly.getComponentStatus('Temperature', Config.id_speicher).tC; print('Temp. Kamin =', temp_kamin); print('Temp. Speicher =', temp_speicher); //kamin <= minimum (65 Grad) if (temp_kamin <= Config.temp_min) { doSwitch(false, 'Relay(0) off. Kamin temp <= ' + Config.temp_min); } else { delta = temp_kamin - temp_speicher; print('Temp. Delta=', delta); // wenn Delta >= 8 Grad, dann schalte Pumpe an if (delta >= Config.temp_diff) { doSwitch(true, 'Relay(0) on. Delta >= ' + Config.temp_diff); // wenn Delta < 4 Grad, dann schalte Pumpe aus } else if (delta < Config.temp_diff_off) { doSwitch(false, 'Relay(0) off. Delta < ' + Config.temp_diff_off); } } //Sicherung, wenn kamin >= temp_max (80 Grad), schalte Pumpe an if (temp_kamin>= Config.temp_max) doSwitch(true, 'Relay(0) off. Kamin temp >= ' + Config.temp_max); print('\n') } catch (err) { doSwitch(false, 'Fehler beim Ausführen des Scripts'); print(err); } } function doSwitch(on, msg) { Shelly.call("Switch.Set", {id:0, on:on}, function (result, errcode, errmsg, text) { if(errcode!==0) print("Fehler bei " + (on ? "ein" : "aus") + "schalten ", errcode, ", ", errmsg); else print(JSON.stringify(result), "\nAusgang " + (on ? "ein" : "aus") + "geschaltet, " + text); }, msg ); } function start() { // do a first shot watch(); // set watch timer to configured value Timer.set(Config.interval * 1000,true,watch); } // schedule script start for 1 second Timer.set(1000,false,start);
Gruß
Spike
- Wenn die Kamintemp. > 65 Grad ist, gehe in die Prüfung
-
Wow, das nennen ich mal eine ausführliche Antwort und Hilfestellung. Top
Ich baue dann mal um.... Wenn ich was habe, melde ich mich wieder.
Vielen Dank u Gruß
Spike
-
Das Skript arbeitet offensichtlich zumindest gelegentlich, was an Hand der Skriptausgeben zu sehen ist.
Wenn etwas nicht funktioniert, ist als erstes zu prüfen, ob das Skript weiterhin läuft.
Du schreibst von einem Shelly Plus 1PM und später von einem Shelly Plug - ist das einer der ersten Generation (vermutlich).
Es ist nicht hinreichend deutlich, welcher der beiden wofür zuständig ist.
Im Skript werden HTTP Requests ausschließlich an die IP Adresse 127.0.0.1 (=localhost) gerichtet, was ja ausschließlich am selben Shelly wirksam werden kann, auf dem das Skript arbeitet.
Hierzu dürfte in der Config Struktur ein Eintrag Remote (o.ä.) fehlen, der die IP Adresse des Plug beinhalten muss.
In den oder zumindest einem der HTTP Requests ist dann statt 127.0.0.1 Config.Remote zu verwenden, damit der Plug die Requests erhält.
Falls du lokal schalten lassen willst, täte ich dafür kein HTTP Request einsetzen sondern einen schlichten Shelly.call("Switch.Set", ...) Aufruf, es sei denn du willst das Skript so offen halten, dass du jederzeit statt lokal zu schalten ein anderes remote Gerät schalten lassen kannst. Dann sind aber die IP Adressen in deinen Requests unterschiedlich zu wählen, also ggf. ein weiterer Config Eintrag einzusetzen.
Ich empfehle sogar, in Config komplette URL(s) zu notieren, die an dieser einen Stelle gepflegt werden können und an den Stellen ihres Einsatzes einen schlichteren Aufruf gestatten.
Bsp:
let Config = {UrlPumpe: 'http://<IP Adresse>/relay/0?turn=off'; // Hier wird der zielführende URL komplett festgelegt.
// ...
}// An der Stelle der URL-Nutzung:
Shelly.call("http.get", {url: UrlPumpe});
Ich bin derzeit überfragt, ob ein Shelly der zweiten Generation auch URLs verarbeitet, die für Geräte der ersten Generation gelten. Wenn, dann ausschließlich aus Gründen einer Rückwärts-Kompatibilität. Andernfalls laufen solche URLs in's leere.
Zwecks Fehleranalyse sind erheblich genauere Informationen erforderlich.
Solche Aussagen haben einen Informationsgehalt von fast Null.
- Was lief gestern?
- Was lief heute Morgen nicht?
- Welche Schaltvorgänge gelingen?
- Welche Schaltvorgänge gelingen nicht
Das sollte erst einmal genauer geklärt werden.
Trotzdem können dich meine obigen Aussagen zum Skript bereits weiterbringen.
Hi,
sorry, ich hatte einen Fehler im Text. Ich habe nur einen Plus1 PM mit dem ich meine Pumpe schalte. Und auf dem läuft auch das Script. Es gibt keinen Plug.
Sorry für das Missverständnis.Zu deinen Rückfragen:
Also zu dem Zeitpunkt lief alles wie gewollt. Die Pumpe wurde korrekt ein bzw. abgeschaltet. Einen Tag später, als z.B. das Delta von 4 Grad erreicht wurden, blieb die Pumpe aus. Das Script lief weiter und hat auch alles richtig ausgegeben: Relay( 0 ) on. Delta >= 4
Ich sehe dann immer diese Meldung im Log:
shelly_http_client.:606 0x3ffe45d0: Finished; bytes 0, code 0, redir 0/3, auth 0, status DEADLINE_EXCEEDED: Timed out
-> Da ist wohl die Verbindung abgebrochen oder ? Nach einem Shelly Neustart, lief es dann wieder...
Bzgl. der Hysterese hast du Recht. Das fehlt noch im Code. Muss ich noch umsetzen.
Gruß
Spike
-
Hi Leute,
ich habe hier in der Suche das Script von Ostfriese gefunden, das ich für meine Pumpensteuerung angepasst habe.
Ich habe einen wasserführenden Kamin der einen Pufferspeicher speist. Die Steuerung soll folgendes machen.
- Wenn die Temperatur im Kamin 65 Grad erreicht dann schalte die Pumpe an. -> Schalte Shelly Plus 1PM ein
- Wenn die Temperatur über 65 Grad ist, dann prüfe den Temperaturunterschied zum Pufferspeicher, ist dieser größer, gleich 4 Grad, dann schalte Pumpe an
- <= 4 Grad, schalte Pumpe aus.
Hier das angepasste Script von Ostfriese
Code
Alles anzeigen//GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 //More information: https://www.gnu.org/licenses/gpl-3.0.txt //ABSOLUTELY NO WARRANTY!!! //Made by Ostfriese //############################## Config ############################ let Config = { temp_diff : 4, temp_min : 65, id_kamin : 100, id_speicher: 101, relay : 0, interval : 10 // 2 seconds is the minimum interval } //############################## Config end ############################ function watch() { try { temp_kamin= Shelly.getComponentStatus('Temperature', Config.id_kamin).tC; temp_speicher= Shelly.getComponentStatus('Temperature', Config.id_speicher).tC; print('Temp. Kamin =',temp_kamin); print('Temp. Speicher =',temp_speicher); //kamin <= minimum if (temp_kamin<= Config.temp_min) { Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'}); print('Relay(', Config.relay, ') off. Kamin temp <= ', Config.temp_min); } else { delta = temp_kamin - temp_speicher; print('Temp. Delta=',delta); //delta more than or equal Config.temp_diff if (delta >= Config.temp_diff) { Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=on'}); print('Relay(', Config.relay, ') on. Delta >= ', Config.temp_diff); } //delta less than Config.temp_diff else { Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'}); print('Relay(', Config.relay, ') off. Delta < ', Config.temp_diff); } } print('\n') } catch (err) { Shelly.call("http.get", {url:'http://127.0.0.1/relay/' + JSON.stringify(Config.relay) + '?turn=off'}); print(err); } } function start() { // do a first shot watch(); // set watch timer to configured value Timer.set(Config.interval * 1000,true,watch); } // schedule script start for 1 second Timer.set(1000,false,start);
Aber irgendwie funktioniert das nicht immer. Gestern lief es erst, aber heute morgen nicht.
Derzeit hat mein Kamin 70 Grad, Delta ist >= 4 Grad, aber der Shelly Plug wird nicht eingeschaltet. Die Bedingungen scheinen zu passen, er biegt richtig ab, was ja die Logausgaben belegen. Relay( 0 ) on. Delta >= 4. Aber das Einschalten hackt.
Temp. Kamin = 70.5
10:55:40Temp. Speicher = 38.9
10:55:40Temp. Delta= 31.6
10:55:40Relay( 0 ) on. Delta >= 4
Hier noch ein paar mehr Logausgaben:
shos_rpc_inst.c:230 http.get via loopback
11:14:37shelly_http_client.:306 0x3ffe45d0: HTTP GET http://127.0.0.1/relay/0?turn=on
11:14:37shelly_notification:163 Status change of temperature:101: {"id":101,"tC":43.06,"tF":109.51}
11:14:38shelly_notification:163 Status change of temperature:100: {"id":100,"tC":71.00,"tF":159.80}
11:14:43shelly_http_client.:606 0x3ffe5fc4: Finished; bytes 0, code 0, redir 0/3, auth 0, status DEADLINE_EXCEEDED: Timed out
11:14:43Temp. Kamin = 71
11:14:47Temp. Speicher = 43.1
11:14:47Temp. Delta= 27.9
11:14:47shelly_ejs_rpc.cpp:41 Shelly.call http.get {"url":"http://127.0.0.1/relay/0?turn=on"}
11:14:47Relay( 0 ) on. Delta >= 4
11:14:4711:14:47
shos_rpc_inst.c:230 http.get via loopback
11:14:47shelly_http_client.:306 0x3ffe5fc4: HTTP GET http://127.0.0.1/relay/0?turn=on
11:14:47shelly_notification:163 Status change of temperature:101: {"id":101,"tC":43.19,"tF":109.74}
11:14:48shelly_notification:163 Status change of temperature:100: {"id":100,"tC":71.12,"tF":160.03}
11:14:53shelly_http_client.:606 0x3ffe45d0: Finished; bytes 0, code 0, redir 0/3, auth 0, status DEADLINE_EXCEEDED: Timed out
11:14:53Temp. Kamin = 71.1
11:14:57Temp. Speicher = 43.1
11:14:57Temp. Delta= 28
11:14:57shelly_ejs_rpc.cpp:41 Shelly.call http.get {"url":"http://127.0.0.1/relay/0?turn=on"}
11:14:57Relay( 0 ) on. Delta >= 4
11:14:5711:14:57
shos_rpc_inst.c:230 http.get via loopback
11:14:57shelly_http_client.:306 0x3ffe45d0: HTTP GET http://127.0.0.1/relay/0?turn=on
11:14:57shelly_notification:163 Status change of temperature:101: {"id":101,"tC":43.06,"tF":109.51}
11:14:58shelly_notification:163 Status change of switch:0: {"id":0,"aenergy":{"by_minute":[0.000,0.000,0.000],"minute_ts":1709892900,"total":6657.430}}
11:15:00shelly_notification:163 Status change of temperature:100: {"id":100,"tC":71.25,"tF":160.25}
11:15:03shelly_http_client.:606 0x3ffe5fc4: Finished; bytes 0, code 0, redir 0/3, auth 0, status DEADLINE_EXCEEDED: Timed out
11:15:03Temp. Kamin = 71.2
11:15:07Temp. Speicher = 43.1
11:15:07Temp. Delta= 28.1
11:15:07shelly_ejs_rpc.cpp:41 Shelly.call http.get {"url":"http://127.0.0.1/relay/0?turn=on"}
11:15:07Relay( 0 ) on. Delta >= 4
11:15:0711:15:07
shos_rpc_inst.c:230 http.get via loopback
11:15:07shelly_http_client.:306 0x3ffe5fc4: HTTP GET http://127.0.0.1/relay/0?turn=on
11:15:07shelly_notification:163 Status change of temperature:100: {"id":100,"tC":71.38,"tF":160.47}
11:15:13shelly_http_client.:606 0x3ffe45d0: Finished; bytes 0, code 0, redir 0/3, auth 0, status DEADLINE_EXCEEDED: Timed out
11:15:13Temp. Kamin = 71.4
11:15:17Temp. Speicher = 43.1
11:15:17Temp. Delta= 28.3
11:15:17shelly_ejs_rpc.cpp:41 Shelly.call http.get {"url":"http://127.0.0.1/relay/0?turn=on"}
11:15:17Relay( 0 ) on. Delta >= 4
Idee woran das liegen könnte ?
Danke u. Gruß
Spike
-
ok, also Button und Scenen könnte ich das ganze hinbekommen. Dann hab ich den falschen Ansatz gewählt. Aber immerhin weiß ich nun wie es mit Schalter funktioniert :). Also Button besorgen, Scenen bauen und bei euch um Hilfe betteln
-
mhhh, Mist. Damit habe ich gar keine Erfahrungen. Dachte ich müsste einfach den Schalter mit dem Button tauschen
D.h ohne Script geht nur wenn ich eine physikalische Verbindung von Schalter zum Shelly habe ?
-
Hi Leute,
habe heute mal einen Schalter dazwischen gebaut. Super es funktioniert nun. Vielen Dank !!!
Wenn ich den Schalter nun mit dem Shelly Button ersetze, muss ich dann irgendwo meine Einstellungen ändern ?
Gruß
Spike
-
geplant war das dann später mal über einen Shelly Button zu schalten. Ich kann aber bis dahin mein einen normalen Lichtschalter am Shelly anschließen. Ginge das ?
-
timer ist keiner gesetzt, was meinst mit Schalter? Ich hab nur den Shelly und teste die Aktion mit der App. Derzeit ist daran eine Glühbirne angeschlossen um das ganze vorab mal testen zu können. 2 Action sind richtig wie ich sie erstellt habe?
-
kann jemand supporten?
-
irgendwo hängts noch Beim Ausschalten geht er direkt wieder an
das sind meine Settings. Habe zwei Actions erzeugt.
-
wo finde ich die Einstellung um den Schalter auf Detach zu stellen ?
-
Hi zusammen,
ich bräuchte mal eure Hilfe als Anfänger. Ich habe einen Shelly 1 Plus hier mit dem ich folgendes machen will. Normal einschalten, aber das Ausschalten soll verzögert passieren (Nachlaufzeit für einen Lüfter). Soweit ich das hier richtig gelesen habe, brauche ich eine Action dafür. Meine Output Action sieht so aus:
Nach dem Ausschalten geht der Schalter nach 5 Sekunden direkt wieder an.
Diese Einstellung bewirkt folgendes:
http://localhost/relay/0?turn=on&timer=5
Nach dem Ausschalten, schaltet sich der Schalter nach 5 Sekunden ab (das ist ja gewünscht), schaltet sich dann aber direkt wieder selbst ein und das ganze läuft dann in einer Endlosschleife. Wie muss ich das ganze richtig konfigurieren ?
Danke für die Hilfe
Spike
-
Hi,
gibt's eine Möglichkeit den Stromverbrauch einer Gruppe anzeigen zu lassen? Ich habe mehrere Shelly Plus 1PM in verschiedenen Räumen im Einsatz. Nun würde ich sehr gerne mit einem Teil der Shelly's eine Gruppe erstellen und dann abhängig vom Verbrauch dieser Gruppe eine Szene ablaufen lassen. Geht sowas?
Grüße Michael