NEWS
[gelöst]-DutyCycle - Telegram Meldung
-
Da ich gerade mit einem MP3-Funk Gong rumgespielt habe dachte ich das der nicht richtig funktioniert, dabei war nur "DutyCycle" erreicht.
Ich möchte mich in Zukunft über Telegram informieren lassen wenn z. B. der DutyCycle Wert über 60% steigt. (welcher Wert da sinnvoll ist weiss ich noch nicht ? )
Dazu habe ich mir folgendes Script erstellt:
! createState("DutyCycle.DutyCycle", {
! name: 'DutyCycle',
! role: 'switch',
! type: 'boolean',
! desc: 'DutyCycle über 60%',
! read: true,
! write: true,
! def: false,
! });
! on({id: 'hm-rega.0.6172', change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! if (getState("hm-rega.0.6172").val >= 60) {
! setState("javascript.0.DutyCycle.DutyCycle"/DutyCycle/, true);
! } else if (getState("hm-rega.0.6172").val < 60) {
! setState("javascript.0.DutyCycle.DutyCycle"/DutyCycle/, false);
! }
! });
! on({id: 'javascript.0.DutyCycle.DutyCycle', val: true}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! sendTo("telegram", "send", {
! text: (['Achtung: ','DutyCycle ist: ',getState("hm-rega.0.6172").val,'%'].join(''))
! });
! });
! on({id: 'javascript.0.DutyCycle.DutyCycle', val: false}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! sendTo("telegram", "send", {
! text: (['DutyCycle ','ist wieder unter 60%, ','aktuell sind es: ',getState("hm-rega.0.6172").val,'%'].join(''))
! });
! });Jetzt bekomme ich aber nicht nur beim überschreiten der 60% eine Meldung, sondern immer wenn der Wert von der CCU geändert wird. Eigentlich habe ich mir dafür den Datenpunkt mit true und false angelegt. Wenn der Wert >= 60% ist wird auf true eingestellt und anders herum. Nur dann möchte ich eine Meldung haben, was ist in meinem Script falsch ?
-
was ist in meinem Script falsch ? `
Es wird auf change: "any" getriggert, also bei jeder Aktualisierung des Zeitstempels und nicht nur bei Wertänderung. -
Besser so:
on({id: 'javascript.0.DutyCycle.DutyCycle', change: 'ne'}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if(value) { sendTo("telegram", "send", { text: (['Achtung: ','DutyCycle ist: ',getState("hm-rega.0.6172").val,'%'].join('')) }); } else { sendTo("telegram", "send", { text: (['DutyCycle ','ist wieder unter 60%, ','aktuell sind es: ',getState("hm-rega.0.6172").val,'%'].join('')) }); } });
-
Ich habe ja wirklich fast keine Ahnung, aber
@paul53:Es wird auf change: "any" getriggert `
Da traue ich mich sogar Paul zu widersprechen.Da steht bei dsl-raser nämlich:
@dslraser:on({id: 'hm-rega.0.6172', change: "ne"}, function (obj) { `
und selbst für mich als js-Legastheniker heisst das not equalsind das vielleicht die Hochkommas schuld
Gruß
rainer
-
Die Aussage betrifft das Triggern auf den Datenpunkt 'javascript.0.DutyCycle.DutyCycle'.
-
Danke, ich habe es jetzt so, scheint zu funktionieren. (verstanden habe ich es aber leider nicht :shock: )
! ````
createState("DutyCycle.DutyCycle", {
name: 'DutyCycle',
role: 'switch',
type: 'boolean',
desc: 'DutyCycle über 60%',
read: true,
write: true,
def: false,
! });
! on({id: 'hm-rega.0.6172', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (getState("hm-rega.0.6172").val >= 60) {
setState("javascript.0.DutyCycle.DutyCycle"/DutyCycle/, true);
} else if (getState("hm-rega.0.6172").val < 60) {
setState("javascript.0.DutyCycle.DutyCycle"/DutyCycle/, false);
}
});
on({id: 'javascript.0.DutyCycle.DutyCycle', change: 'ne'}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if(value) {
sendTo("telegram", "send", {
text: (['Achtung: ','DutyCycle ist: ',getState("hm-rega.0.6172").val,'%'].join(''))
});
} else {
sendTo("telegram", "send", {
text: (['DutyCycle ','ist wieder unter 60%, ','aktuell sind es: ',getState("hm-rega.0.6172").val,'%'].join(''))
});
}
}); -
was ist in meinem Script falsch ?
Es wird auf change: "any" getriggert, also bei jeder Aktualisierung des Zeitstempels und nicht nur bei Wertänderung.
Change nicht angegeben oder übersehe ich das?
Wenn nicht definiert ist default "ne"
> not equal) New value must be not equal to the old one (state.val != oldState.val) If pattern is id-string this value is used by default
-
Aber eine andere Frage…
Nutzt ihr alle hm oder tcl Skripte für den Duty Cycle?
(hm-rega.0.6172 al Variable für ein Skript?).
Mittlerweile kann man doch DC über hm-rega direkt synchronisieren.
-
verstanden habe ich es aber leider nicht `
Die https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state kennst Du ? -
verstanden habe ich es aber leider nicht
Die [https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state](https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#on–-subscribe-on-changes-or-updates-of-some-state) kennst Du ?
jetzt ja.[emoji3] -
Change nicht angegeben oder übersehe ich das?
Wenn nicht definiert ist default "ne" `
@Doku:Please note, that by default "change" is equal to "any", except when only id as string is set (like on("id", function (){});). In last case change will be set to "ne". `
const idXy = '...'; on(idXy, callback); // Triggert bei Wertänderung on({id: idXy}, callback); // Triggert bei Aktualisierung des Zeitstempels
-
Change nicht angegeben oder übersehe ich das?
Wenn nicht definiert ist default "ne" `
@Doku:Please note, that by default "change" is equal to "any", except when only id as string is set (like on("id", function (){});). In last case change will be set to "ne". `
const idXy = '...'; on(idXy, callback); // Triggert bei Wertänderung on({id: idXy}, callback); // Triggert bei Aktualisierung des Zeitstempels ```` `
OK. Stimmt
Böse Falle.
-
Ich bin noch ein Newbie hier aber hab einige Jahre auf dem Buckel mit anderen Skriptsprachen etc. auch in der Entwicklung in Teams.
Nichtsdestotrotz praktiziere hier noch ein "Trial & Error", macht einfach mega Spaß mit ioBroker und Heim-Automatisierung.
Aus Gründen der Lesbarkeit des Quellcodes empfehle ich aber im Zweifel immer, Default-Werte entweder im Quelltext-Kommentar zu erwähnen oder dennoch mit an die Prozedur zu übergeben. Natürlich macht man das nicht bei Alltags-Funktionen und ich halte mich selbst leider auch nicht immer dran…
-
Wie kriege ich denn den DutyCycle in hm-rega.0.6172 angezeigt?
Also der Datenpunkt existiert bei mir nicht…
edit: hat sich erledigt, in den Adaptereinstellungen aktivieren :lol: