NEWS
Blockly
-
Hallo,
egal was und wie ich es mache, ich bekomme mit Blockly kein Licht gesteuert.
Habe mir die Hilfe auf "https://github.com/ioBroker/ioBroker.ja … ckly_en.md" angeschaut, meiner Meinung nach alles gemacht wie es dort steht. Mache ich irgendetwas grundsätzliches noch falsch ?
blockly.JPG
Sollte nicht theoretisch beides funktionieren ? Wenn EG Flur Licht sich ändert, OG 1 Flur Licht einschalten, im ersten teil mit wert von EG Flur, oder im 2. ein?
Habe auch etliche andere Sachen versucht, möchte zunächst einfach nur ein Licht schalten können, wie ist erst einmal egal.
Lg Mike `
Hallo mike2712
Dies wird Dir nicht wirklich weiterhelfen.
Aber ich habe Dein Blockly mal nach gebaut.
Beide Versionen funktionieren einwandfrei.Das erzeugte Script sieht so aus.
! on({id: "hm-rpc.0.KEQ0881320.1.STATE"/WZ-TA-LErker:1.STATE/, change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.KEQ1075100.1.STATE"/WZ-Licht-Regal:1.STATE/, getState("hm-rpc.0.KEQ0881320.1.STATE").val);
! });
! on({id: 'hm-rpc.0.KEQ0881320.1.STATE', change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.KEQ1075100.1.STATE"/WZ-Licht-Regal:1.STATE/, getState("hm-rpc.0.KEQ0881320.1.STATE").val);
! });Die Trigger sind in Ordnung. Das Problem muss woanders sein.
Grüße
-
Hallo
@rantanplan:Hallo mike2712
Dies wird Dir nicht wirklich weiterhelfen.
Aber ich habe Dein Blockly mal nach gebaut.
LampeSchaltetLampe.png
Beide Versionen funktionieren einwandfrei.
Das erzeugte Script sieht so aus.
! on({id: "hm-rpc.0.KEQ0881320.1.STATE"/WZ-TA-LErker:1.STATE/, change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.KEQ1075100.1.STATE"/WZ-Licht-Regal:1.STATE/, getState("hm-rpc.0.KEQ0881320.1.STATE").val);
! });
! on({id: 'hm-rpc.0.KEQ0881320.1.STATE', change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.KEQ1075100.1.STATE"/WZ-Licht-Regal:1.STATE/, getState("hm-rpc.0.KEQ0881320.1.STATE").val);
! });Die Trigger sind in Ordnung. Das Problem muss woanders sein.
Grüße `
ich habe meins jetzt mal exakt so gemacht wie Dein, natürlich mit meinem Licht.Der Code ist unterschiedlich in der ersten Zeile:
! on({id: 'hm-rpc\.0\.MEQ0276480\.1\.STATE', change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.MEQ0276492.1.STATE"/_OG1 Flur Licht.STATE/, getState("hm-rpc.0.MEQ0276539.1.STATE").val);
! });Ich schau mal, jetzt habe ich ja einen Ansatz, aber verstehe tue ich das nicht.
Auch das bringt mich nicht weiter, folgendes script habe ich mit java, ohne Blockly erstellt, geht auch nicht.
! on({id: 'hm-rpc.0.MEQ0276480.1.STATE', change: "ne"}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! setState("hm-rpc.0.MEQ0276492.1.STATE"/_OG1 Flur Licht.STATE/, getState("hm-rpc.0.MEQ0276539.1.STATE").val);
! });Gruß Mike
-
Hallo,
vielen Dank für die Hilfe, ich hab es jetzt am laufen **** freu ****.
Es lag daran das Script unter global und nicht unter common war.
Weiß zwar noch nicht wo der Unterschied ist, aber jetzt kann ich loslegen mit dem testen und spielen.
Lg Mike
-
Hallo,
vielen Dank für die Hilfe, ich hab es jetzt am laufen **** freu ****.
Es lag daran das Script unter global und nicht unter common war.
Weiß zwar noch nicht wo der Unterschied ist, aber jetzt kann ich loslegen mit dem testen und spielen.
Lg Mike `
Na dann viel Spaß!
Meine Scripte liegen alle oberhalb von "global" und "common".
Die Bedeutung von "global" und "common" ist mir noch ganz klar.Grüße
-
Hallo
Ich bin gerade dabei meine Heizungsscripte von ScriptGUI nach Blockly zu bringen.
Wenn ich das durch habe, kann ich CCU.IO ausschalten
Jetzt vermisse ich aber einen Baustein in Blockly
Bei ScriptGUI hieß der "Timespan".
Damit konnte man herausfinden ob die aktuelle Zeit innerhalb einen Zeitbereiches ist oder nicht.
Ein erzeugtes Script von dem Baustein sieht so aus.
! function codebox_21(data) {
! var inputlocal_131_out = Start_Zeit_Bereich;
! var inputlocal_132_out = Ende_Zeit_Bereich;
! var now = new Date();
! var time1 = new Date();
! var time2 = new Date();
! var in1 = inputlocal_131_out;
! var in2 = inputlocal_132_out;
! var double1 = in1.split(" ");
! var double2 = in2.split(" ");
! var time;
! var date1;
! var date2;
! if (double1[1]) {
! time = double1[1].split(":");
! date1 = double1[0].split(".");
! date2 = double1[0].split("-");
! } else {
! time = in1.split(":");
! date1 = in1.split(".");
! date2 = in1.split("-");
! }
! if (time.length == 2) {
! time1.setHours(time[0]);
! time1.setMinutes(time[1]);
! }
! if (time.length == 3) {
! time1.setHours(time[0]);
! time1.setMinutes(time[1]);
! time1.setSeconds(time[2]);
! }
! if (date2.length == 3) {
! if (date2[0].length == 4) {
! time1.setFullYear(date2[0]);
! } else {
! time1.setFullYear("20" + date2[0]);
! }
! time1.setMonth(date2[1] - 1);
! time1.setDate(date2[2]);
! }
! if (date1.length == 3) {
! if (date1[0].length == 4) {
! time1.setFullYear(date1[2]);
! } else {
! time1.setFullYear("20" + date1[2]);
! }
! time1.setMonth(date1[1] - 1);
! time1.setDate(date1[0]);
! }
! if (double2[1]) {
! time = double2[1].split(":");
! date1 = double2[0].split(".");
! date2 = double2[0].split("-");
! } else {
! time = in2.split(":");
! date1 = in2.split(".");
! date2 = in2.split("-");
! }
! if (time.length == 2) {
! time2.setHours(time[0]);
! time2.setMinutes(time[1]);
! }
! if (time.length == 3) {
! time2.setHours(time[0]);
! time2.setMinutes(time[1]);
! time2.setSeconds(time[2]);
! }
! if (date2.length == 3) {
! if (date2[0].length == 4) {
! time1.setFullYear(date2[0]);
! } else {
! time1.setFullYear("20" + date2[0]);
! }
! time2.setMonth(date2[1] - 1);
! time2.setDate(date2[2]);
! }
! if (date1.length == 3) {
! if (date1[0].length == 4) {
! time2.setFullYear(date1[2]);
! } else {
! time2.setFullYear("20" + date1[2]);
! }
! time2.setMonth(date1[1] - 1);
! time2.setDate(date1[0]);
! }
! process.send(time1);
! process.send(time2);
! if (time1.valueOf() < now.valueOf() && time2.valueOf() > now.valueOf()) {
! var timespan_57_out = true;
! } else {
! var timespan_57_out = false;
! }
! if (timespan_57_out != false && timespan_57_out != undefined && timespan_57_out != 0) {
! codebox_43(data);
! }
! if (timespan_57_out == false || timespan_57_out == undefined || timespan_57_out == '') {
! codebox_48(data);
! }
! };@Bluefox - Ist es möglich so einen Baustein in Blockly einzubauen?
Grüße
-
Ein "schedule"-Blockly wo man eine Variable als "Zeit" übergeben kann wäre super. `
+1 `
Hallo, Danke für die Antwort (sorry das ich jetzt erst antworte).Also ich hab schon mit einer richtigen URL probiert. Aber das Problem ist doch vor dem Bildschirm. Ich hab das Ergebnis (den Rückgabewert) im Parameter result erwartet, dieser ist aber im objekt response.
der Blockly
erzeugt den code
require("request")('http://192.168.178.205/addons/xmlapi/rssilist.cgi', function (error, response, result) { LogObject('error', error); LogObject('result', result); LogObject('response', response); });
in response ist jetzt ein objekt
response={"statusCode":200,"body":"ergebniss"}
Wie greife ich jetzt unter Blockly auf das body zu? Muss ich dazu auf eine Javascript Funktion zurückgreifen, die mir das wieder auseinander nimmt oder gibt es da eine einfache Möglichkeit?
Danke & Gruß
(LogObject ist folgende Funktion (zum importieren in Blockly):
! ````
<block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="=m_sG#h6Qfd+Q`;Q/+-k" x="13" y="-87"><mutation statements="false"><arg name="text"></arg>
<arg name="data"></arg></mutation>
<field name="NAME">LogObject</field>
<field name="SCRIPT">CmNvbnNvbGUubG9nKFN0cmluZyh0ZXh0KSArICc9JyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTsK</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment></block> -
Ein "schedule"-Blockly wo man eine Variable als "Zeit" übergeben kann wäre super. `
+1 `
Hallo, Danke für die Antwort (sorry das ich jetzt erst antworte).Also ich hab schon mit einer richtigen URL probiert. Aber das Problem ist doch vor dem Bildschirm. Ich hab das Ergebnis (den Rückgabewert) im Parameter result erwartet, dieser ist aber im objekt response.
der Blockly
Blockly_request.PNG
erzeugt den code
require("request")('http://192.168.178.205/addons/xmlapi/rssilist.cgi', function (error, response, result) { LogObject('error', error); LogObject('result', result); LogObject('response', response); });
in response ist jetzt ein objekt
response={"statusCode":200,"body":"ergebniss"}
Wie greife ich jetzt unter Blockly auf das body zu? Muss ich dazu auf eine Javascript Funktion zurückgreifen, die mir das wieder auseinander nimmt oder gibt es da eine einfache Möglichkeit?
Danke & Gruß
(LogObject ist folgende Funktion (zum importieren in Blockly):
!
<block xmlns="http://www.w3.org/1999/xhtml" type="procedures_defcustomnoreturn" id="=m_sG#h6Qfd+Q`;Q/+-k" x="13" y="-87"><mutation statements="false"><arg name="text"></arg> <arg name="data"></arg></mutation> <field name="NAME">LogObject</field> <field name="SCRIPT">CmNvbnNvbGUubG9nKFN0cmluZyh0ZXh0KSArICc9JyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment></block>
`
Es ist komisch, dass result nichts drin hat.Laut request doku https://www.npmjs.com/package/request :
var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Show the HTML for the Google homepage. } })
muss body in deinem result drin stecken.
Warum dass nicht so ist, weiß ich nicht, aber ich habe bei mir getestet und es geht mit "result".
Du kannst mit dem block nicht auf ein Objekt zugreifen. Dafür muss du mit Funktionen arbeiten.
-
Hallo
Ich bin gerade dabei meine Heizungsscripte von ScriptGUI nach Blockly zu bringen.
Wenn ich das durch habe, kann ich CCU.IO ausschalten
Jetzt vermisse ich aber einen Baustein in Blockly
Bei ScriptGUI hieß der "Timespan".
Damit konnte man herausfinden ob die aktuelle Zeit innerhalb einen Zeitbereiches ist oder nicht.
Timespan.png
Ein erzeugtes Script von dem Baustein sieht so aus.
! function codebox_21(data) {
! var inputlocal_131_out = Start_Zeit_Bereich;
! var inputlocal_132_out = Ende_Zeit_Bereich;
! var now = new Date();
! var time1 = new Date();
! var time2 = new Date();
! var in1 = inputlocal_131_out;
! var in2 = inputlocal_132_out;
! var double1 = in1.split(" ");
! var double2 = in2.split(" ");
! var time;
! var date1;
! var date2;
! if (double1[1]) {
! time = double1[1].split(":");
! date1 = double1[0].split(".");
! date2 = double1[0].split("-");
! } else {
! time = in1.split(":");
! date1 = in1.split(".");
! date2 = in1.split("-");
! }
! if (time.length == 2) {
! time1.setHours(time[0]);
! time1.setMinutes(time[1]);
! }
! if (time.length == 3) {
! time1.setHours(time[0]);
! time1.setMinutes(time[1]);
! time1.setSeconds(time[2]);
! }
! if (date2.length == 3) {
! if (date2[0].length == 4) {
! time1.setFullYear(date2[0]);
! } else {
! time1.setFullYear("20" + date2[0]);
! }
! time1.setMonth(date2[1] - 1);
! time1.setDate(date2[2]);
! }
! if (date1.length == 3) {
! if (date1[0].length == 4) {
! time1.setFullYear(date1[2]);
! } else {
! time1.setFullYear("20" + date1[2]);
! }
! time1.setMonth(date1[1] - 1);
! time1.setDate(date1[0]);
! }
! if (double2[1]) {
! time = double2[1].split(":");
! date1 = double2[0].split(".");
! date2 = double2[0].split("-");
! } else {
! time = in2.split(":");
! date1 = in2.split(".");
! date2 = in2.split("-");
! }
! if (time.length == 2) {
! time2.setHours(time[0]);
! time2.setMinutes(time[1]);
! }
! if (time.length == 3) {
! time2.setHours(time[0]);
! time2.setMinutes(time[1]);
! time2.setSeconds(time[2]);
! }
! if (date2.length == 3) {
! if (date2[0].length == 4) {
! time1.setFullYear(date2[0]);
! } else {
! time1.setFullYear("20" + date2[0]);
! }
! time2.setMonth(date2[1] - 1);
! time2.setDate(date2[2]);
! }
! if (date1.length == 3) {
! if (date1[0].length == 4) {
! time2.setFullYear(date1[2]);
! } else {
! time2.setFullYear("20" + date1[2]);
! }
! time2.setMonth(date1[1] - 1);
! time2.setDate(date1[0]);
! }
! process.send(time1);
! process.send(time2);
! if (time1.valueOf() < now.valueOf() && time2.valueOf() > now.valueOf()) {
! var timespan_57_out = true;
! } else {
! var timespan_57_out = false;
! }
! if (timespan_57_out != false && timespan_57_out != undefined && timespan_57_out != 0) {
! codebox_43(data);
! }
! if (timespan_57_out == false || timespan_57_out == undefined || timespan_57_out == '') {
! codebox_48(data);
! }
! };@Bluefox - Ist es möglich so einen Baustein in Blockly einzubauen?
Grüße `
Brauchst du wirklich mit Datum oder nur Tageszeit? Weil Tageszeit ist schon implementiert. -
Brauchst du wirklich mit Datum oder nur Tageszeit? Weil Tageszeit ist schon implementiert. `
Hallo Bluefox
Danke für Deine Antwort.
Du meinst wahrscheinlich den Baustein "Aktuelle Zeit ist "{}" "Uhrzeit"".
Der währe gut, wenn "Uhrzeit" über eine Variable gesteuert werden könnte.
So "festverdrahtete" Parameter mag ich nicht, weil man für Änderungen IMMER an das Programm muss.
Das regel ich lieber über Systemvariablen.
Und "Frau" will auch mal was ändern können. (Und die lasse ich besser nicht ans Programm
)
Ähnlich "Aktuelle Zeit von "Sonnenaufgang usw." Offset (Minuten).
Der "Offset" sollte variabel sein.
Ich habe es Momentan mit einer Funktion gelöst, die true/false zurückgibt.
{aktuelle Zeit als SS:mm} >= {Zeit_Anfang} UND {aktuelle Zeit als SS:mm} <= {Zeit_Ende}
Wobei "Zeit_Anfang" und "Zeit_Ende" Systemvariablen sind.
Dies funktioniert leider nicht tagesübergreifend. Also zwischen "22:00" und "05:00".
Ein Vergleich mit Zeit/Datum wäre auch nicht schlecht.
Z.B. von 03.03.2017 bis 20.03.2017 ist Urlaub.
(Zeitangaben natürlich variabel
)
Grüße
-
- 1 auch ich würde mich freuen wen man diese werte (zeit/timer etc) hard Coded UND als Variable setzen könnte, das macht alles flexibler/dynsmischer
Sent from my iPhone using Tapatalk
-
Hallo,
das ist ein super Tool, es macht richtig Spaß, aber ich fände es auch gut wenn ein Vergleich von Wochentagen möglich wäre, .B. sollen meine Jalousien am Wochenende mit anderen Zeiten wie in der Woche gesteuert werden, oder gibt es da was und ich habs nur nicht gefunden?
Lg Mike
-
Hallo,
das ist ein super Tool, es macht richtig Spaß, aber ich fände es auch gut wenn ein Vergleich von Wochentagen möglich wäre, .B. sollen meine Jalousien am Wochenende mit anderen Zeiten wie in der Woche gesteuert werden, oder gibt es da was und ich habs nur nicht gefunden?
Lg Mike `
HalloSchau Dir mal den Baustein "Aktuelle Zeit als xxx" unter "Datum und Zeit".
Da kannst Du z.B. Wochentag als Nummer auswählen.
Wochentag 1 = Montag …. Wochentag 7 = Sonntag.
Grüße
-
Hallo Zusammen
Es ist vollbracht
Alles von CCU.io nach ioBroker portiert und CCU.io ausgeschaltet!
Bis jetzt läuft alles sehr stabil!
Eine Kleinigkeit ist mir noch aufgefallen.
Ich habe auf der CCU Systemvariablen umbenannt.
ioBroker hat das nach 2 Std. immer noch nicht mitbekommen.
Erst nach rega-Adapter Neustart stimmte wieder alles.
Blockly hat davon nichts mitbekommen.
In den Scripten standen die alten Bezeichnungen.
Das ist auch OK so.
Die Scripte liefen sauber, weil die ID ja gleichgeblieben ist.
Aber der alte Variablenname blieb auch im Baustein sichtbar, wenn ich die Variable mit dem neuen Namen ausgewählt habe.
Erst Baustein neu anlegen bzw. kopieren übernahm den neuen Variablennamen.
Alles in allem bin ich sehr zufrieden!
Danke Bluefox. Sehr gute Arbeit!
Grüße
-
Ich habe auf der CCU Systemvariablen umbenannt.
ioBroker hat das nach 2 Std. immer noch nicht mitbekommen.
Erst nach rega-Adapter Neustart stimmte wieder alles. `
Das ist normal.
Bei Änderungen an sysvar oder Programmen oder Namen überhaupt muss der Rega Adapter neu gestartet werden.
Ob das auch für den JavaScript Adapter gilt weiss ich nicht.
Gruß
Rainer
-
Das ist normal.
Bei Änderungen an sysvar oder Programmen oder Namen überhaupt muss der Rega Adapter neu gestartet werden. `
Wusste ich noch nicht.
Danke für den Hinweis.
Grüße
-
Ich finde Blockly total klasse! Gerade für kleinere Sachen zwischendurch, zB schalte Außenlicht ein für 2 Minuten wenn es geklingelt hat. Klappt wunderbar.
Nur kriege ich es nicht hin, die Lichteinschaltzeiten nur zwischen Sonnenuntergang Anfang bis Sonnenaufgang Ende einzustellen.
Im Javascript Adapter ist Längen/Breitengrad eingestellt.
Ich habe folgenden Logikblock versucht (Screenshot zu breit, deshalb als Text):
FALLS Aktuelle Zeit SS:MM >= aktuelle Zeit von Sonnenuntergang Anfang ODER Aktuelle Zeit SS:MM <= aktuelle Zeit von Sonnenaufgang Ende DANN...
Ich nehme an, die SS:MM kommt nicht der Astrozeit nicht klar, was muss ich stattdessen eingeben?
Vielen Dank!!
-
Ich finde Blockly total klasse! Gerade für kleinere Sachen zwischendurch, zB schalte Außenlicht ein für 2 Minuten wenn es geklingelt hat. Klappt wunderbar.
Nur kriege ich es nicht hin, die Lichteinschaltzeiten nur zwischen Sonnenuntergang Anfang bis Sonnenaufgang Ende einzustellen.
Im Javascript Adapter ist Längen/Breitengrad eingestellt.
Ich habe folgenden Logikblock versucht (Screenshot zu breit, deshalb als Text):
FALLS Aktuelle Zeit SS:MM >= aktuelle Zeit von Sonnenuntergang Anfang ODER Aktuelle Zeit SS:MM <= aktuelle Zeit von Sonnenaufgang Ende DANN...
Ich nehme an, die SS:MM kommt nicht der Astrozeit nicht klar, was muss ich stattdessen eingeben?
Vielen Dank!! `
Es muss UND sein.Auf dem git liegt eine Version, wo so was möglich ist:
48_2016-09-25_22_34_01-iobroker.admin.png -
Jetzt habe ich mich endlich auch an Javascript getraut und mit Blockly angefangen rumzuspielen.
Wenn ich mir dann den Code ansehe steht dort :
on({id: "hm-rpc.1.MEQ1848733.1.PRESS_SHORT"/*BWM_Bad:1.PRESS_SHORT*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; }); setState("sayit.0.tts.text", "de;100;" + 'Jetzt ist wieder Ruhe'); console.debug("telegram[de][Volume - 100]: " + 'Jetzt ist wieder Ruhe');
es ist sayit ausgewählt, aber im debug steht telegram.
ist das ok?
Gruß
Rainer
-
es ist sayit ausgewählt, aber im debug steht telegram.
ist das ok? `
Hallo Homoran
Habe gerade bei mir nachgeschaut.
Wenn ich die Debug-Ausgabe aktiviere, steht auch bei mir "Telegram".
Wird wohl ein "copy/paste" Fehler sein.
Grüße
-
BTW: Alle blocke die je gefragt wurden,sind implementiert.