NEWS
Sayit einbinden in vorhandenes Script
-
Habe hier ein Script um den CO2 Gehalt abzufragen, jetzt möchte ich gerne mit dem Sayit Adapter über Sonos auch eine Ansage einbinden.
Das funktioniert auch soweit, aber die Ansage kommt immer, wenn der Wert aktualisiert wird.
Wie muss ich das Script abändern, damit die Ansage nur kommt, wenn der Wert über/unter 1000 ist?
Als Ansage hätte ich dann gerne "CO2 Gehalt ist im Normalbereich (wenn unter 1000), Wert beträgt XXXX" wenn über 1000 dann "CO2 Gehalt ist zu hoch, Wert beträgt XXXX" und wie kann ich bei der Variable "wert" im Sayit Ausdruck noch die Lautstärke mitgeben?
var wert = getState("hm-rega.0.1968").val var idSayIt = "sayit.0.tts.text"; createState('co2Textfarbe', "black"); // Objekt in javascript.0\. für die Textfarbe on('hm-rega.0.1968', function (obj) { obj.newState.val = parseInt(obj.newState.val, 10); log('hm-rega.0.1968: ' + obj.newState.val); if (obj.newState.val <= 1000) { setState("co2Textfarbe","green", true); setState (idSayIt, wert); } else if (obj.newState.val >= 1000 && obj.newState.val <=1300) { setState("co2Textfarbe","orange", true); setState (idSayIt, wert); } else if (obj.newState.val >= 1300) { setState("co2Textfarbe","red", true); setState (idSayIt, wert); } });
Gruß Frank
-
Halo coyote,
@coyote:wie kann ich bei der Variable "wert" im Sayit Ausdruck noch die Lautstärke mitgeben? `
Das geht so
@[url=https://github.com/ioBroker/ioBroker.sayit/blob/master/README.md:~~https://github.com/ioBroker/ioBroker.sayit/blob/master/README.md"]~~ou can specify the volume of announcement in percent from current or given volume (not from maximal). E.g. if command is de;75;Gutes Wetterand "announce volume" is 50%, the announce will be played with volume 38% from 100% possible. `
Wie muss ich das Script abändern, damit die Ansage nur kommt, wenn der Wert über/unter 1000 ist? `
Homematic Sensoren senden ihren aktuellen Wert alle paar Minuten (manche alle paar Sekunden). Du bekommst bei jeder Sendung einen neuen Wert, also immer weider eine neue Sayit-Ausgabe. Auch wenn, der Wert unter 1000 ist. Sobald er unter diese Grenze fällt ist die Bedingung wahr und es wird bei jeder Aktualisierung angesagt. Das ist nicht gewünscht.Besser:
Da du schon die Textfarbe für bestimmte Wertbereiche festlegst, kannst du diese Variable gleich für das Triggern der Sprachausgabe nutzen.
Wenn sich co2Textfarbe ändert (also nur bei Über/Unterschreitung der definierten Grenze), dann gib den aktuellen Wert aus (und die Farbe/bzw zB "Normalbereich")
on('co2Textfarbe', function (obj) { if (obj.newState.val ==="green") { // alles in Ordnung setState (idSayIt, "Alles in Ordnung, der CO2 Gehalt liegt bei " + getState('hm-rega.0.1968').val; } else if (obj.newState.val ==="orange") { // bedenklich setState (idSayIt, "80;Vorsicht, der CO2 Gehalt liegt bei " + getState('hm-rega.0.1968').val; } else if (obj.newState.val ==="red") { // kritisch setState (idSayIt, "100;Achtung Warnung! Der CO2 Gehalt liegt bei " + getState('hm-rega.0.1968').val; } });
Und wofür ist das "true" am Ende? Das kannst du weglassen. Neuer State der Variable ist "Farbe", nicht true.
setState("co2Textfarbe","orange", true); setState("co2Textfarbe","red", true);
Gruß
Pix
-
Hi Pix,
vielen Dank schon mal.
Klar, das "true" ist natürlich nicht nötig, ist mir gar nicht aufgefallen. Das Script hatte mir Bluefox mal zusammengebaut, warum da "true" mit dabei war weiß ich jetzt auch nicht.
Ok, das hier
> de;75;Gutes Wetterand
wusste ich schon, nur wusste ich nicht, wie ich das mit der Variable einbaue.Hast du mir ja jetzt gezeigt, danke.
So:
> "80;Vorsicht, der CO2 Gehalt liegt bei " + getState('hm-rega.0.1968').val
Man, man da hätte ich auch selbst drauf kommen können mit den Farbwerten… :roll: