NEWS
Blockly
-
Hey Bluefox,
Blockly ist ja nochmal cooler geworden in den letzten zwei Wochen.
Einen "Feature-Request" hätte ich aber noch:
Es gibt schon den "schedule"-Blockly, wo man aber das ganze nur statisch definieren kann.
Ich habe auch so einige dynamische Zeittigger wo die Zeit entweder aus Datenpunken kommt (und die in VIS eingestellt werden sollen) oder dynamisch berechnet werden.
Ein "schedule"-Blockly wo man eine Variable als "Zeit" übergeben kann wäre super. Dann könnte man den "Cron-String ("* * * * …) dynamisch per Skript zusammenbauen und starten. Was man aber auch bräuchte ist das die "schedule-ID" (weiss nicht wie das heisst - das was man braucht um den schedule wieder zu löschen) zurückgegeben wird, damit man dann per clearschedule das wieder rückgängig machen kann.
Oder besser: Das ganze umgesetzt wie die anderen "Timeout"-Blocklys die es ja schon gibt
Was denkst Du?
Dann könnte man sowas wie in http://forum.iobroker.net/viewtopic.php?f=21&t=3612 auch per Blockly bauen
-
Hallo,
irgendwie geht der Request bei mir nicht (Javascript Adapter Version 3.0.8).
Der Code, mit dem ich teste, ist dieser:
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block 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> <block type="procedures_defcustomreturn" id="^85KpX]1kFVfVNz[zB7~" x="13" y="-37"><mutation statements="false"><arg name="xml"></arg></mutation> <field name="NAME">xml2json</field> <field name="SCRIPT">ICB0cnkgewogICAgdmFyIG9iaiA9IHt9OwogICAgaWYgKHhtbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeG1sLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGl0ZW0gPSB4bWwuY2hpbGRyZW4uaXRlbShpKTsKICAgICAgICB2YXIgbm9kZU5hbWUgPSBpdGVtLm5vZGVOYW1lOwoKICAgICAgICBpZiAodHlwZW9mIChvYmpbbm9kZU5hbWVdKSA9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgb2JqW25vZGVOYW1lXSA9IHhtbDJqc29uKGl0ZW0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAodHlwZW9mIChvYmpbbm9kZU5hbWVdLnB1c2gpID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHZhciBvbGQgPSBvYmpbbm9kZU5hbWVdOwoKICAgICAgICAgICAgb2JqW25vZGVOYW1lXSA9IFtdOwogICAgICAgICAgICBvYmpbbm9kZU5hbWVdLnB1c2gob2xkKTsKICAgICAgICAgIH0KICAgICAgICAgIG9ialtub2RlTmFtZV0ucHVzaCh4bWwyanNvbihpdGVtKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBvYmogPSB4bWwudGV4dENvbnRlbnQ7CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0gY2F0Y2ggKGUpIHsKICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKTsKICAgICAgcmV0dXJuIDA7CiAgfQo=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment></block> <block type="procedures_defcustomreturn" id="t
#xvDHK.~)bn5olq!{" x="13" y="13"><mutation statements="false"><arg name="xml"></arg></mutation>
<field name="NAME">XmlToObject</field>
<field name="SCRIPT">Y29uc29sZS5sb2coIiBpbiAiICsgeG1sKTsNCg0KLy9wYXJzZVN0cmluZyh4bWwsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkgew0KLy8gICAgY29uc29sZS5sb2coIm5leHQgaW4gIiArIHhtbCk7DQovLyAgICBjb25zb2xlLmRpcihyZXN1bHQpOw0KLy8gICAgcmV0dXJuIHJlc3VsdDsNCi8vfSk7DQpyZXR1cm4gMDs=</field>
<comment pinned="false" h="80" w="160">XML in ein Objekt umwandeln</comment></block>
<block type="schedule" id="O6{|gum0ksgzqa501[uO" x="13" y="63"><field name="SCHEDULE">/5 * * * * </field>
<statement name="STATEMENT"><block type="debug" id="|79}D#ehh@ov@O+Ls~6"><field name="Severity">log</field>
<value name="TEXT"><shadow type="text" id="DI(0]FX(1hGd.WsQV/+"><field name="TEXT">start script</field></shadow></value>
<next><block type="request" id="#U)7f;4s)^#rwV?NMZh%"><mutation with_statement="true"></mutation>
<field name="WITH_STATEMENT">TRUE</field>
<field name="LOG">debug</field>
<value name="URL"><shadow type="text" id="1!4,]JXU5M{!ZvV{BY:"><field name="TEXT">http://IP-Adresse-CCU/addons/xmlapi/rssilist.cgi</field></shadow></value>
<statement name="STATEMENT"><block type="procedures_callcustomnoreturn" id="LV=TPx0|yRh(8A7nhRT#"><mutation name="LogObject"><arg name="text"></arg>
<arg name="data"></arg></mutation>
<value name="ARG0"><block type="text" id="v!)Fu^Az=fnqbSyPmzs1"><field name="TEXT">error</field></block></value>
<value name="ARG1"><block type="variables_get" id="irB;n@O^zSwbj%i+NoT^"><field name="VAR">error</field></block></value>
<next><block type="procedures_callcustomnoreturn" id="^NJBHPswMF;~%OnpUI8j"><mutation name="LogObject"><arg name="text"></arg>
<arg name="data"></arg></mutation>
<value name="ARG0"><block type="text" id="3r/Dsi_H^/%zw#{py+~+"><field name="TEXT">result</field></block></value>
<value name="ARG1"><block type="variables_get" id="^?.,,MzH8N5Juz_.G.t"><field name="VAR">result</field></block></value> <next><block type="procedures_callcustomnoreturn" id="z(iI,CMz5ByVP{z[ZWTN"><mutation name="LogObject"><arg name="text"></arg> <arg name="data"></arg></mutation> <value name="ARG0"><block type="text" id="P
e6|hv3j@%Syr{jSV[9"><field name="TEXT">response</field></block></value>
<value name="ARG1"><block type="variables_get" id="nZdpV}lW=3Blq]|P7o70"><field name="VAR">response</field></block></value>
<next><block type="procedures_callcustomnoreturn" id="kq%3DU68R0HqXA0;T8HL"><mutation name="LogObject"><arg name="text"></arg>
<arg name="data"></arg></mutation>
<value name="ARG0"><block type="text" id="n]gxP)vQ,M9Y6mpCqu#y"><field name="TEXT">response2</field></block></value>
<value name="ARG1"><block type="procedures_callcustomreturn" id="I3i(H=VEhll?7P-K}2(g"><mutation name="xml2json"><arg name="xml"></arg></mutation>
<value name="ARG0"><block type="variables_get" id="@.~?U2o%(D4,r~uSJ9B7"><field name="VAR">response</field></block></value></block></value>
<next><block type="variables_set" id="-lfNxQII6nUg(tbHN0r"><field name="VAR">value</field> <value name="VALUE"><block type="procedures_callcustomreturn" id="udD1pWkjV~VS4[)]r.kO"><mutation name="XmlToObject"><arg name="xml"></arg></mutation> <value name="ARG0"><block type="variables_get" id="_s,c#}{JR,AeIDOq}(hE"><field name="VAR">result</field></block></value></block></value> <next><block type="procedures_callcustomnoreturn" id="M26ky{kIYgQaDMH|]^d("><mutation name="LogObject"><arg name="text"></arg> <arg name="data"></arg></mutation> <value name="ARG0"><block type="text" id="128Hh]n.81@Vi.!AE2Ue"><field name="TEXT">value =</field></block></value> <value name="ARG1"><block type="procedures_callcustomreturn" id="ab3~kY^un?Nnu8U_iu6,"><mutation name="xml2json"><arg name="xml"></arg></mutation> <value name="ARG0"><block type="variables_get" id="c4Tez]2:hVzwKe?cviaV"><field name="VAR">value</field></block></value></block></value></block></next></block></next></block></next></block></next></block></next></block></statement> <next><block type="debug" id="NwsMT0D
(J9)oLj6)UEQ"><field name="Severity">log</field>
<value name="TEXT"><shadow type="text" id="(Y]v1ZaK%qgbS%UQm@7b"><field name="TEXT">ende</field></shadow></value></block></next></block></next></block></statement></block></xml>Der erzeugte Cose sieht auch irgendwie komisch aus. Aus ![1367_blockly.png](/assets/uploads/files/1367_blockly.png) wird
try {
require("request")('bla');
} catch (e) { console.error(e); }
console.log("request: " + 'bla');Hat jemand vielleicht ein Beispiel für einen Request mit Blockly? Danke & Gruß
-
-
Hat jemand vielleicht ein Beispiel für einen Request mit Blockly? `
Dort wo das hellgrüne "bla" ist musst Du einen "Text"-Block hinpacken. Und dort schreibst Du die URL rein die du aufrufen willst.
Also z.B. "http://meinserver.de/meineurlphp?bla=blubb"
Und der Code macht dann einen Request da hin.
-
Hallo!
Wie kann man in einem Text ein "Enter" einfügen? `
Hallo RitterProbiere es mal mit \n
1.Zeile\n2.Zeile
Grüße `
Geht leider nicht, auch nicht \r
-
Hallo Bluefox,
nicht das meine Aussage ein Gewicht hat (habe im letzten Jahrhundert nur richtig SPS Programmierung in der Schule gelernt)
Mit der Einführung von Blockly macht ioBroker das erste mal für mich erst richtig Sinn !!! Habe das Projekt zwar immer Aufmerksam und bewundert verfolgt und auch ausprobiert, da ich aber schon aus alten Tagen Mediola nutze und Neo kostenlos angeboten bekommen habe, fehlte mir noch das Einsatzgebiet.
Erste Sache habe ich auch schon umgesetzt: Ein Taster an der Tür schaltet jetzt mein Yamaha AV Receiver ein und spielt Musik ab,Lautstärke usw….
Super Sache , mach bitte weiter so
Danke kann man so oder so an euch nicht genug sagen (macht ihr ja so wie mein Wissenstand ist alles privat)
Vorsichtige Frage, wird es dazu noch eine deutsche Anleitung geben?
-
Hallo und Willkommen im Forum,
@Elektroman:Vorsichtige Frage, wird es dazu noch eine deutsche Anleitung geben? `
Wofür suchst du noch eine deutsche Anleitung?Für blockly?
Das wird leider noch etwas dauern. Aber da könntest Du dann auch helfen.
Jetzt wo du dich schon eingearbeitet hast, könntest du ja eine Anleitung anfangen, die wir dann auf der Website übernehmen und weiter ausbauen können.
Was fehlt dir denn besonders?
Gruß
Rainer
-
Danke für die schnelle Antwort,
1. Da ich bis auf SPS noch nichts prog. habe fehlen mir gewisse Grundlagen, daher kann ich wenig ableiten ( CCU 2 Programme prog. zähle ich mal nicht dazu)
2. Ich helfe gerne, nur reicht mein jetziges Niveau bestimmt nicht aus um anderen zu helfen
3. Besonderes erst mal nichts, weil ich auch nicht richtig Überschauen kann was alles geht.
Oh doch eine Kleinigkeit, gehört aber nicht hier hin, suche noch die Möglichkeit bei meinem Receiver den Net-Radiosender weiter zu schalten ( mit einer weiteren Taste)
Für viele bestimmt nur eine Spielerei, für mich ist das aber eine super Sache
Kurzes drücken auf den "EIB Taster"( der keiner ist) Receiver geht an stellt die Lautstärke ein und Schaltet Net-Radio als Eingang ein.
Nach einer Stunde geht er automatisch aus oder ich drücke die Taste lange
Im Alltag bin ich immer zu faul erst das Tablet zu suchen usw….
-
Ist das so korrekt, oder zu umständlich?
![](</s><URL url=)<link_text text="http://uploads.tapatalk-cdn.com/2016092 ... 283815.jpg">http://uploads.tapatalk-cdn.com/20160920/7965789db5e49271fe6bffa315283815.jpg</link_text>" /> -
Willst du nicht so was einbauen wie: "ich schalte das Radio in 2 Minuten aus, druck Knopf um weiter zu hören" ?
und bei "Radio aus", solltest du noch den Timer stoppen.
-
Hallo,
ich bekomme es immer noch nicht am laufen, ich habe glaube ich so ziemlich fast alles ausprobiert.
Kann es sein, dass dein _EG.Flur.Licht.State immer nur "true" ist?
Dann solltest du auf "wurde aktualisiert" ändern.
Und bitte im zweiten Fall versuchst du auf ein Wert zu triggern… Du musst Objekt ID nehmen.
Und natürlich "Javascript" Adapter muss laufen und Skript muss gespeichert sein und auch laufen. `
EG Flur Licht ist nicht immer "true", ich spiele damit rum.
2. Fall habe ich auch geändert, ohne Erfolg.
Javascript Adapter läuft, selbstverständlich speichere ich und aktualisiere nochmals.
Unter den Adapter Einstellungen habe ich den Haken bei "Erlaube das Kommando "setObject": " gesetzt, aber das hatte wohl auch nichts damit zu tun.
Benötige ich noch irgendetwas wo ich vielleicht nicht dran denke, oder was mir so nicht bewusst ist (z.B. Cron oder ID Einfügen)?
Bin irgendwie am verzweifeln.
blockly.JPG
Im Log ist nichts zu sehen, weder im Script Log unterhalb der Programmierung, noch in iOBroker.
Das ist der Auszug aus dem Log "info" von iobroker.
! hm-rpc-0 2016-09-12 20:20:19.311 info setValue ["MEQ0276480:1","STATE",false] BOOL
! hm-rpc-0 2016-09-12 20:20:15.972 info setValue ["MEQ0276480:1","STATE",true] BOOL
! hm-rpc-0 2016-09-12 20:19:47.767 info setValue ["MEQ0276480:1","STATE",false] BOOLLg Mike `
Folgende Warnungen bekomme ich, kann es damit etwas zu tun haben, weiß leider nicht was das bedeutet.
! Home-ioBroker 2016-09-20 19:02:54.094 warn host.Home-ioBroker instance system.adapter.javascript.0 already running with pid 2724
! host-Home-ioBroker 2016-09-20 19:02:24.080 warn instance system.adapter.javascript.0 terminated due to SIGTERM
! host-Home-ioBroker 2016-09-20 19:02:03.237 warn instance system.adapter.javascript.0 already running with pid 1672
! host-Home-ioBroker 2016-09-20 19:01:53.019 warn instance system.adapter.javascript.0 already running with pid 1672
! host-Home-ioBroker 2016-09-20 19:01:33.223 warn instance system.adapter.javascript.0 terminated due to SIGTERM
! host-Home-ioBroker 2016-09-20 19:01:23.005 warn instance system.adapter.javascript.0 terminated due to SIGTERM
! host-Home-ioBroker 2016-09-20 19:00:44.098 warn instance system.adapter.javascript.0 already running with pid 1020
! host-Home-ioBroker 2016-09-20 19:00:14.084 warn instance system.adapter.javascript.0 terminated due to SIGTERMGruß Mike
-
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 `
Kannst du da debug Ausgaben einbauen? Ob trigger überhaupt funktioniert? -
Vielen danke für den Tip Bluefox, frage ist nur wie?
Wird der timeout beim erneuten drücken des Taster nicht so oder so zurückgesetzt?
-
Vielen danke für den Tip Bluefox, frage ist nur wie?
Wird der timeout beim erneuten drücken des Taster nicht so oder so zurückgesetzt? `
Direkt unter dem "timeout"-block (heisst bei die "ausführen" ist ein "clearTimeout" (weiss grad nicht wie der in deutsch heisst … den musst Du nehmen und einbauen wenn Du ausschaltest
-
Puhhhh,
also
1. mit Time out stop bekomme ich es leider nicht hin, mir ist leider nicht klar wo ich ihn platzieren muss
2. bekomme ich leider keine richtige Rückmeldung vom Receiver welcher Eingang gerade ausgewählt ist. Bereutet im Klartext:
Ich schalte das Radio an und meine Frau schaltet danach auf TV um Timer schaltet leider aus
-
"Time out stop" nutzt du um das automatische ausschalten nach ner Stunde zu "stoppen" (also zu verhindern). Also muss es an alle Stellen wo du es stoppen willst … AM einfachsteh muss das in den Block wo du explizit ausschaltest weil Du sollst doppelt ausschaltest - einmal sofort und einmal der Timer später.
Das Problem mit der Fehlenden Rückmeldung und damit zu frühem ausschalten löst das freilich nicht ;(
-
Die Sache mit dem autom. abschalten werde ich jetzt löschen, da ich ja keine Rückmeldung bekomme.
Ist aber auch nicht schlimm, vergessen kann man das ja eigentlich nicht
Wichtiger ist die Frage wie ich ein Web-Radiosender weiter schalten kann. Aber das kann mir max. hier der Entwickler des Adapters sagen (auch an dieser Stelle vielen Dank und meinen großen Respekt dafür), oder?
Ich habe leider auch keine aktuelle Liste mit Befehlen von YAMAHA gefunden, die ich als "Command" einfügen könnte
Noch Jemand eine Idee ?
-
Hallo,
Kannst du da debug Ausgaben einbauen? Ob trigger überhaupt funktioniert? `
ja das habe ich nochmals in vielen Varianten versucht, hatte ich auch schon mal hier gepostet "Beitragvon mike2712 » 12.09.2016, 19:11"
Kann das etwas mit den Warnungen zu tun haben? Ich denke auch das der Trigger nicht funktioniert, aber warum?
Lg Mike
-
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