Hy,
Der Shelly ist doch unter "Dauer"-Spannung und daher auch ständig im WLAN.
Oder Übersehe ich etwas?
Hy,
Der Shelly ist doch unter "Dauer"-Spannung und daher auch ständig im WLAN.
Oder Übersehe ich etwas?
Für manche Probleme und speziell bei chronischer Reizbarkeit sollte man ärztliche Hilfe aufsuchen und nicht andere damit belästigen....Kotz dich aus aber nicht hier!
You made my day
Selbes Bild:
Die angezeigten Werte sind überhaupt nicht plausibel.
Ich kann hier nur ein simples Addieren/Subtrahieren erkennen.
Saldieren nur in der Cloud?
Würde mich interessieren wie das umgesetzt werden könnte...
Ich habe auch das einfache Script einmal bei einem Shelly zum Laufen gebracht und die Console habe ich im Web GUI auch gefunden.
Wie würde denn das Script lauten, um den Schalter täglich 15 Minuten nach Sonnenuntergang einzuschalten und um Mitternacht auszuschalten, untrer der Bedingung, dass eines unserer beiden Mobiles einmal am Tag eingeloggt gerwesen ist.
Für mich sind hier zu viele Ungereimtheiten um weiterhin meine Zeit zu investieren.
In deinem Netzwerk kannst du selbst im WLAN Router entscheiden, ob deine Netzwerk-Devices eine dynamische oder fixe IP bekommen.
Beispiel Fritzbox 5590 Fiber:
Wenn du im u.a. Script deine "fixe" WLAN IP einträgst dann zeigt es dir in der Console an ob das Gerät(IP) im Netzwerk erreichbar ist oder nicht.
/// Check if IP(device) is online in the network V1.0
////////////////////////////////////////////////////////////////////////////////////////////
///
/// Created by HighFive © 2024
///
////////////////////////////////////////////////////////////////////////////////////////////
// IP address to be checked
let endpoint = "http://192.168.178.83";
////////////////////////////////////////////////////////////////////////////////////////////
function pingEndpoints() {
Shelly.call("http.get", {
url: endpoint,
timeout: 1
},
function(response, error_code, error_message) {
if (error_code === -104) {
print("Endpoint: " + "*** " + endpoint + "***" + " NOT reachable in the network");
} else {
print("Endpoint: " + "*** " + endpoint + "***" + " reachable in the network");
}
}
);
}
////////////////////////////////////////////////////////////////////////////////////////////
pingTimer = Timer.set(5000, true, pingEndpoints);
////////////////////////////////////////////////////////////////////////////////////////////
Alles anzeigen
Weitere Aktionen/Reaktionen im Script sollten ein Kinderspiel sein...
Was an einer Zenerdiode nicht linear sein soll, entzieht sich meiner Kenntnis…
Die folgende Darstellung und Beschreibung muss man unter Berücksichtigung der unterschiedlichen Effekte sehen. Das bedeutet, dass der Zener-Effekt, der Avalanche-Effekt und der Lawinen-Durchbruch "nicht" unterschiedliche Bezeichnungen für den gleichen Effekt sind, sondern gesondert betrachtet werden sollten.
Der Zener-Effekt wird durch das elektrische Feld ausgelöst, dass ab einer bestimmten Größe zur Herauslösung der Elektronen aus ihren Kristallbindungen führt. Die Elektronen führen zur Bildung des Stromes Iz. Ab einem bestimmten Spannungswert UZ0, der Zener-Spannung, wird die Z-Diode niederohmig. Ab der Zener-Spannung nimmt der Strom Iz schlagartig zu.
Die Ladungsträger, die durch den Zener-Effekt frei wurden, werden durch das elektrische Feld sehr stark beschleunigt. Das führt dazu, dass weitere Elektronen aus ihren Kristallbindungen herausgestoßen werden. Die Sperrschicht der Diode wird mit freien Ladungsträgern überschwemmt. Das nennt man Lawineneffekt (Stossionisation).
Bei der Z-Diode überlagert sich der Zener-Effekt und der Lawineneffekt. Dieser Zustand wird als Zenerdurchbruch bezeichnet. Die plötzliche Leitfähigkeit führt zu einem sehr hohen Strom in Sperrrichtung. Ist der Strom zu groß, wird die Z-Diode zerstört. Deshalb ist im Datenblatt einer Z-Diode immer ein maximal zulässiger Sperrstrom IZmax angegeben, der nicht überschritten werden darf. Genauso wichtig ist die maximal zulässige Verlustleistung Ptot. Beide Grenzwerte dürfen nicht überschritten werden und sollten bei der Dimensionierung einer Schaltungen mit Z-Diode bekannt sein und berücksichtigt werden.
Fällt die Sperrspannung unter UZ0, dann wird die Sperrschicht sofort wieder hergestellt. Der Bereich zwischen IZmin und IZmax wird Arbeitsbereich oder Durchbruchbereich genannt.
Die Zener-Spannung kann bei der Herstellung der Z-Diode durch die Dotierung des Silizium-Kristalls im Bereich 2 bis 600V eingestellt werden.
Die Temperaturabhängigkeit der Z-Diode ist vor allem in der Mess- und Regeltechnik ein Nachteil. Bei Anwendungen, wo eine exakte Spannung benötigt wird, macht sich das negativ bemerkbar. Deshalb schaltet man Z-Dioden gerne mit positivem und negativem Temperaturkoeffizienten TK in Reihe. Im Optimalfall heben sie sich auf oder es bleibt nur ein kleiner Rest übrig. Der Temperaturkoeffizient TK gibt die Temperaturabhängigkeit an.
Manchmal nimmt man zur Temperaturstabilisierung auch normale Silizium-Dioden. In speziellen temperaturkompensierten Z-Dioden hat der Hersteller bereits diese Zusammenschaltung vorgenommen.
Das war mir nicht linear genug und Temp. abhängig.
Entspricht auch meiner Erfahrung.
Der Kalkulator ist nicht vollständig, weil der Innenwiderstand des ADC-Eingangs nicht vernachlässigbar ist.
Nun hierzu hast du ja auch schon den "parametrierbaren Korekturfaktur" schon erwähnt.
Ein genauer Abgleich auf 25V der Zenerdiode ist nicht notwendig, weil der Shelly UNI plus parametrierbare Korrekturfaktoren erlaubt.
Ein Vorteil hat die Zehnerdiode... In der Auswertung kann ich im o.a. Beispiel zum Messergebnis 25V hinzuzählen und erreiche daher einen ~ doppelt so große V/bit am ADC als mit Spannungsteiler.
Frage ist nur, ob die Nichtlinearität der Zehnerdiode und Temperatur-Einfluß & Drift dies nicht auffrisst.
Was spricht gegen einen Spannungsteiler mit 2 Widerständen?
Klaus,
War eine spannende Aufgabenstellung, die ich zum Gehirn frei blasen, während meiner beruflichen Programmierung einschob.
Folglich war es ein "bilateral und länderübergreifend“ erfolgreiches Projekt.
Grüße aus den Dolomiten nach Bayern.
HighFive
Hallo Klaus,
Hier nun die V5.0
/// Boilertemperatur (Temperatur/Zeit) und 2 Slaves V5.0
////////////////////////////////////////////////////////////////////////////////////////////
///
/// Created by HighFive © 2024
///
////////////////////////////////////////////////////////////////////////////////////////////
let log = 1; /// If no console log needed please set log to "0"
//
let actOutputState; /// Last relay status (false/true)
let cnt = 0; /// Internal cycle counter
////////////////////////////////////////////////////////////////////////////////////////////
function timerHandler() {
// minimal temperatur outside heating time / Temperaturen [ON/OFF] wenn keine Schaltzeit aktiv. (eg. Frostschutz immer aktiv))
let tempOff = 16;
let tempOn = 14;
// create a new Date object
let now = new Date();
// get the current hour (from 0 to 23)
let hour = now.getHours();
// get the current minute (from 0 to 59)
let minute = now.getMinutes();
// get the current minutes of the actual day
actdayminutes = (hour * 60) + minute;
//
temp_boiler = Shelly.getComponentStatus('Temperature', 100).tC;
///
if ((actdayminutes > (9 * 60) + 30) && (actdayminutes < (19 * 60) + 30)) { /// Wenn (Uhrzeit größer 9:30) UND (Uhrzeit unter 19:30) schalte:
tempOff = 51; /// AUS wenn Temperatur größer 51°C
tempOn = 49; /// EIN wenn Temperatur unter 49°C
} /// Wenn keine Uhrzeit aktiv dann gelten tempOff = 16 / tempOn = 14
///
if (temp_boiler > tempOff) {
Shelly.call("Switch.set", {
'id': 0,
'on': false
});
};
if (temp_boiler < tempOn) {
Shelly.call("Switch.set", {
'id': 0,
'on': (temp_boiler > 0)
});
};
///
if ((Shelly.getComponentStatus('switch', 0).output !== actOutputState) || ((cnt < 1) || (cnt > 15))) {
actOutputState = Shelly.getComponentStatus('switch', 0).output;
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
if (actOutputState === true) {
Shelly.call('HTTP.get', {
url: 'http://192.168.178.111/relay/0?turn=on&timer=30', /// IP slave 1 for ON [Automatik OFF if 30 secondes NO new telegram]
timeout: 1
});
Shelly.call('HTTP.get', {
url: 'http://192.168.178.222/relay/0?turn=on&timer=30', /// IP slave 2 for ON [Automatik OFF if 30 secondes NO new telegram]
timeout: 1
});
} else {
Shelly.call('HTTP.get', {
url: 'http://192.168.178.111/relay/0?turn=off', /// IP slave 1 for OFF
timeout: 1
});
Shelly.call('HTTP.get', {
url: 'http://192.168.178.222/relay/0?turn=off', /// IP slave 2 for OFF
timeout: 1
});
};
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
cnt = 0;
};
///
cnt = cnt + 1;
///
if (log != 0) {
print('Temperatur Boiler = ', temp_boiler + ' / ON: ' + tempOn + ' / OFF: ' + tempOff + ' / Boiler-Relay : ' + actOutputState);
}
}
////////////////////////////////////////////////////////////////////////////////////////////
Timer.set(1000, true, timerHandler, null);
////////////////////////////////////////////////////////////////////////////////////////////
Alles anzeigen
Da ich keine genaueren Angaben von dir habe, nehme ich an:
Du musst folgende Anpassungen durchführen:
Alles anzeigenHallo Klaus,
Ich habe festgestellt, dass so bis 5 Sekunden nach dem Einschalten des Shelly's kein Temperaturwert vorhanden ist und daher der Wert "0" vorliegt und deshalb eingeschalten wird.
Daher wurde die V4.1 durch V4.2 ersetzt.
Es ist aber nur eine Änderung in Zeile 39:alt: 'on': true
neu: 'on': (temp_boiler > 0)
Bitte um Test und Feedback
In den technischen Daten steht:
Direkt am Gerät AC 110/240.
Ist ein wenig verwirrend, jedoch bin ich mir sicher ohne 230 V ± würde es keine EU-Zulassung erhalten.
Dieser Script sollte alle deine Anforderung erfüllen. (Bestehende Temperatur-Aktions müssen gelöscht werden)
In Zeile 9 & 10 bitte deine gewünschten Temperaturen eintragen.
/// Automatic cooling or manually permanently ON V1.0
////////////////////////////////////////////////////////////////////////////////////////////
///
/// Created by HighFive © 2024
///
////////////////////////////////////////////////////////////////////////////////////////////
/// Begin USER settings
////////////////////////////////////////////////////////////////////////////////////////////
let tempOff = 20; // AUS wenn Temperatur unter 20°C
let tempOn = 22; // EIN wenn Temperatur größer 22°C
let log = 1; // If NO console log needed please set log to "0"
////////////////////////////////////////////////////////////////////////////////////////////
/// End USER settings
////////////////////////////////////////////////////////////////////////////////////////////
let auto;
////////////////////////////////////////////////////////////////////////////////////////////
function SetKVS(key, value) {
Shelly.call(
"KVS.Set", {
"key": key,
"value": value,
},
function(result) {
if (log != 0)
print("KVS Saved, rev:", result.rev);
}
);
};
////////////////////////////////////////////////////////////////////////////////////////////
function SaveCounters() {
SetKVS("AutomaticOperatingMode", auto);
};
////////////////////////////////////////////////////////////////////////////////////////////
Shelly.call(
"KVS.Get", {
"key": "AutomaticOperatingMode",
},
function callback(result, error_code, error_message, userdata) {
if (error_code === 0) {
auto = result.value;
print("Loaded Automatic operating mode: ", auto);
}
}
);
////////////////////////////////////////////////////////////////////////////////////////////
Shelly.addStatusHandler(function(e) {
if (e.component === "switch:0") {
if (e.delta.source != "loopback") {
auto = !e.delta.output;
SaveCounters();
}
}
});
////////////////////////////////////////////////////////////////////////////////////////////
function timerHandler() {
temp_room = Shelly.getComponentStatus('Temperature', 100).tC;
///
if (auto === true) {
if (temp_room < tempOff) {
Shelly.call("Switch.set", {
'id': 0,
'on': false
});
};
//
if (temp_room > tempOn) {
Shelly.call("Switch.set", {
'id': 0,
'on': true
});
};
};
///
if (log != 0) {
print('Automatic: ' + auto + ' / Temperatur: ' + temp_room + '°C / ON >: ' + tempOn + '°C / OFF <: ' + tempOff + '°C / Cooling-Relay : ' + Shelly.getComponentStatus('switch', 0).output);
};
};
////////////////////////////////////////////////////////////////////////////////////////////
Timer.set(1000, true, timerHandler, null);
////////////////////////////////////////////////////////////////////////////////////////////
Alles anzeigen
Hallo Klaus,
Eigentlich bin ich auch ohne Sterne sehr zufrieden....;)
Nun mal im Ernst...
Überprüfe mal alle Actionen und/oder ob ein 2ter Script hier reinspuckt.
Du hast sicher Verständnis wenn ich erst nach den 6ten Stern greife, wenn du mir von allen 3 Shelly's die relevanten Einstellungen übermittelst.
Mit „parallelem Shelly“ habe ich einen zweiten Shelly bezeichnet, der die Rolle des Handschalters übernimmt. Mit zwei Shellies (Übersteuerung Hand und Automatik) habe ich vier Zustände zur Verfügung. Das sollte reichen…
That's right,
Die Aufgabenstellung braucht via Script nur 3 Zustände, bei 50% Hardware-Kosten im Vergleich zu deiner 2 Shelly Lösung.
Im Betrieb auch nur rund 50% der Energiekosten.
Falls ein paralleler Schalter als Shelly montiert ist, wird dieser bei Wiederkehr der Netzspannung den vorherigen Zustand einnehmen (sofern man ihn derart parametriert hat).
Thats correct, wie der Engländer sagt…
Bei dieser "Solution" ist jedoch die Information ob dieser Zustand durch "HAND Überbrückung" über die APP oder durch die "AUTOMATIK Temperaturregelung" erfolgte, unwiederbringlich verloren....
D.h. Es braucht 3 vorherige Zustände: AUS, EIN HAND durch Überbrückung, EIN AUTOMATIK durch Temperatur.
Shelly hat jedoch für den vorherigen Zustand nur die binäre Antwort: EIN oder AUS
(Im Script welches ich gerade erzeuge, wird dies jedoch gespeichert und bei Netzwiederkehr/Reboot auch mit dieser Info weiter berücksichtigt.)
mmichael Wart mal ab mit einem Script kannst du deine Aufgabenstellung am Plus 1PM perfekt lösen. Bin aktuell beim Testen.
In der Analog-Welt wäre das ein Schalter parallel zu einem Temeperatur-basierten Schalter.
Ja, in der guten alten Analog-Welt....
Also in der Digitalen Welt ist das nicht mal einfach so...
Ist aber eine spannende Herausforderung und ich arbeite an einer Lösung kann dir aber noch nichts Versprechen.