Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k Beiträge

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    maxclaudiM
    @Daniel-8 sagte: Das heißt ich bräuchte dein zenSDK script gar nicht mehr sonder würde wieder alles über den MQTT Broker von iob machen. Wobei du ja geschrieben hast das du nicht weißt ob das funktioniert. Wollte nicht noch zusätzlich was anderes aufbauen. In dem Fall würde ich das zenSDK-Script zur MQTT-Steuerung anpassen. Habe ich schon für einen HUB2000. Einfach konfigurieren, Struktur und Datenpunkte bleiben identisch bzw. werden noch mehr und zusätzlich automatisch neu angelegt. Triggern statt HTTP GET pollen. Statt POST leicht verändertes JSON erzeugen und an Datenpunkte des MQTT-Adapters übergeben. PS: Es geht beides. In meinen Tests läuft zenSDK weiter mit dem 1600AC+
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    D
    Nochmals herzlichen Dank!!!
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text. Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind. Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht. Ich arbeite mich jetzt mal rund um und schaue was da raus kommt. Nochmals herzlichen Dank Gruss Andi (aus der überhitzten Schweiz)
  • [auf Umweg gelöst] Fritzbox-LEDs via Telnet steuern

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    689 Aufrufe
    F
    Problem gelöst, wenn vielleicht auch mit Umweg Expect-Pakete lokal nachinstalliert ("apt-get install expect") Für jede der 4 Stati jeweils ein Script geschrieben. Script des Beispiels "Zuhause" (Abgelegt als "/home/pi/Documents/PresetZuhause"): ! ```` spawn telnet 192.168.100.3 set timeout 10 expect "Fritz!Box web password:" send "<pass>\r" expect "# " send "echo 13,4 >/var/led\r" expect "# " send "echo 14,1 >/var/led\r" expect "# " send "echo 4,1 >/var/led\r" expect "# " send "echo 7,1 >/var/led\r" expect "# " send "exit\r"</pass> - Den Aufruf des Scripts dann in Blockly-Script als "Aktionen"-"exec" (Kommando="expect -f /home/pi/Documents/PresetZuhause") Komplettes "Blockly"-Script: >! ```` on({id: "javascript.0.Homewizard.Preset.PresetHome"/*PresetHome*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("javascript.0.Homewizard.Preset.PresetHome").val == 0) { exec('expect -f /home/pi/Documents/PresetZuhause'); } else if (getState("javascript.0.Homewizard.Preset.PresetHome").val == 1) { exec('expect -f /home/pi/Documents/PresetAbwesend'); } else if (getState("javascript.0.Homewizard.Preset.PresetHome").val == 2) { exec('expect -f /home/pi/Documents/PresetSchlafen'); } else if (getState("javascript.0.Homewizard.Preset.PresetHome").val == 3) { exec('expect -f /home/pi/Documents/PresetUrlaub'); } else { setState("sayit.0.tts.text", "de-DE_CLOUD_Male;" + 'Fehlerhafter Preset Status'); console.error("sayIt[de-DE_CLOUD_Male]: " + 'Fehlerhafter Preset Status'); } }); Es scheint so zu tun wie es soll. Weitere Tests werden es zeigen. Vielleicht hat jemand noch eine bessere Lösung… (Als direktes Javascript/o.ähnl.) Gruß Florian
  • In Node Red Informationen aus einen Script empfangen und auswerten

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    5k Aufrufe
    N
    Hallo Habe es mal mit var get = require('simple-get'); get('http://192.168.2.87:1880/test?temperature=22', function (err, res) { if (err) throw err; console.log(res.statusCode); // 200 res.pipe(process.stdout); // `res` is a stream }); versucht. Geht viel schneller. Start braucht auch ca 2sek., danach ist das Script sofort durchgelaufen und Node Red reagiert auch sofort danach. var request = require('request'); braucht wohl so lange. Das ganze läuft auf einem RPi Zero W. Gruß NetFritz
  • [gelöst] Werte ändern am Objekte z.B. obj.common.summe

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    799 Aufrufe
    T
    Hallo Dutchman, vielen Dank für deinen Hinweis. Die Funktion var obj = getObject ('adapter.N.objectName'); obj.native.settings = 1; hat bei mir nie funktioniert. Nur mit dem zusätzlichen Befehl setObject('adapter.N.objectName', obj, function (err) { if (err) log('Cannot write object: ' + err); }); wird der Wert geschrieben. Ich dachte immer, das dies nicht erforderlich ist, da ich keine Fehlerabfrage benötige. Gruß Thomas
  • Blocky, Timeout

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    rantanplanR
    @ludino: Wobei es ja eigentlich ganz einfach ist. ahh! ` Ist es eigentlich auch ;) Die Bausteine werden von oben nach unten abgearbeitet. Einfach mal das Blockly, sich selbst, von oben nach unten vorlesen. Und bedenken das das Script genau das macht was da steht. Grüße
  • Asynchron bzw mir fehlt der Lösungsansatz

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    682 Aufrufe
    BlackmikeB
    thnx, wieder einiges gelernt…
  • [Frage] SQL-Abfrage und Zugriff auf einen Wert des results

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    apollon77A
    JSON ist eine Textform der Datenstruktur, das heisst nacj JSON.stringify is es einfach ein Text-String. Da kannst Du auf nichts mehr zugreifen :-)
  • [Frage]Aufzählungen/Gewerke STATES nicht CHANNELS abfragen

    Verschoben
    3
    2
    0 Stimmen
    3 Beiträge
    974 Aufrufe
    andreaskosA
    > Frage: Wie muss ich den Selektor abändern, damit die States durchgezählt werden? Das würde mich auch interessieren! Wenn nämlich die Datem aus einer CCU übernommen werden, dann werden in den Gewerken (also den enum.functions) die Einträge als "channels" und nicht als "states" eingetragen. Manuell habe ich dazu aber noch keine Möglichkeit gefunden. Weiß hier jemand Abhilfe?
  • Sonoff skript als Taster "gelöst"

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    N
    Geil! Dankeschön!!! Ich hab das ganze Wochenende probiert.
  • Node-Red abgeschossen, bekomme es nicht mehr zu laufen, wer kann Helfen

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    HomoranH
    Zusätzliche npm-Module kannst du doch ganz einfach installieren, indem du sie in der Konfiguration der Instanz in das dafür vorgesehene Feld einträgst. Anschließend die Instanz neu starten und alles ist gut. Gruß Rainer
  • [FRAGE]Verbrauchsdaten aus Basis der Daten aus History Adapter

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    E
    mir ist noch eingefallen, dass mein Skript ein paar, bei mir als global, definierte Funktionen nutzt: function datum_jahresanfang (date) { return (date).getFullYear()+"-01-01"; } function datum_monatsanfang (date) { var monat=1+date.getMonth(); return (date).getFullYear()+"-"+monat+"-01"; } function datum_tagesanfang (date) { var jahr=(date).getFullYear(); var monat=1+date.getMonth(); var tag = date.getDate(); return jahr+"-"+monat+"-"+tag; } function datum_wochenanfang(date){ var iDayOfWeek = date.getDay(); var iDifference = date.getDate() - iDayOfWeek + (iDayOfWeek === 0 ? -6:1); var woa=new Date(date.setDate(iDifference)); return woa.toISOString().slice(0,10); } function datum_gestern(datum){ var yesterday = new Date(datum.valueOf() - 1000*60*60*24); return yesterday.toISOString().slice(0,10); } function kalenderwoche (d){ // Copy date so don't modify original d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())); // Set to nearest Thursday: current date + 4 - current day number // Make Sunday's day number 7 d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7)); // Get first day of year var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)); // Calculate full weeks to nearest Thursday var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7); // Return array of year and week number return weekNo; } function currentDate2() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); } function addDate(strDate) { var date = strDate.split('.'); var d = currentDate2(); d.setDate(date[0]); d.setMonth(date[1]-1); d.setFullYear(date[2]); return d; } function isDateInRange(strLower, strUpper) { var now = new Date(); var lower = addDate(strLower); var upper = addDate(strUpper); var inRange = false; if (upper > lower) inRange = (now >= lower && now <= upper) ? true : false; else log('isDateInRange meldet Fehler! "von"-Datum ist nicht früher als "bis"-Datum', 'error'); return inRange; } damit sollte das Skript dann auch funktionieren …..
  • Log Einträge von Require Node-Modulen sehen?

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    374 Aufrufe
    Niemand hat geantwortet
  • Hilfe gesucht bei Werteänderung ohne Ausführung :)

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    573 Aufrufe
    arteckA
    kannst du den Code in Code Tag reinschreiben.. dann ist es lesbarer
  • Script nur ausführen, wenn Systemvariable abc = true UND Sonnenuntergang = true

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    R
    @MontgomeryB: 1. ist mit dem Script gesichert, dass der jeweilige 'Zeitplan' nur greift, wenn die oberen Bedingungen erfüllt sind? ` Es wird geschaltet, wenn die Zeit erreicht wird und die falls-Bedingungen bereits erfüllt sind! @MontgomeryB: 2. Schaltet das Script auch dann, wenn es erst aktiviert wird, während alle Bedingungen bereits erfüllt sind? Sprich: Ich möchte, dass das Script auch schaltet, wenn ich es erst aktiviere, nachdem die Sonne z.B. bereits vor 60 Min. untergegangen ist. ` Dann musst du noch ein, oder eben mehrere Scripte erstellen, wo der Trigger eben nicht die Zeit, sondern dein "Schalter" und die Zeit muss dann in den falls-Block! Als Zeitvergleich eignet sich z.B. der Block "aktuelle Zeit ist zwischen" da musst du dann z.B. 00:00 Uhr und "Morgendämmerung" abfragen! Enrico
  • [gelöst] Blockly-Frage: Skript1 triggert Skript 2

    Verschoben
    3
    3
    0 Stimmen
    3 Beiträge
    631 Aufrufe
    C
    @Matzebhv: Moin, trigger mal direkt auf den Datenpunkt und nicht auf den Wert. Und dann ändere nach "wurde aktualisiert" Gruß Matze ` Super, das war es, jetzt geht es. Vielen Dank! Gesendet von meinem SM-G920F mit Tapatalk
  • [Frage] Auslesen bestimmter States

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    Z
    habe schonmal einen kleinen Teil hinbekommen. vielen dank euch beiden. var vrooms = ["Wohnzimmer", "Esszimmer", "Keller_Buero"]; var selectedIDs = []; var aussentemperatur = []; var selectedIDs_aussen = []; for (var f=0, j=vrooms.length; f jetzt möchte ich die selecteIDs nur erhöhen wenn die aussentemperatur <5°C ist. so gesehen ist das ja kein Problem, nur müsste ich irgendwie die alten Temperaturen speichern damit sich das system nicht hochschaukelt.
  • [Frage] Prüfen, ob Wert -1 ist

    Verschoben
    5
    2
    0 Stimmen
    5 Beiträge
    594 Aufrufe
    P
    Das wars :-) Vielen Dank!
  • [Gelöst] Blockly: Tür abschließen nach Abwesenheit mehr als 5 Minuten

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    S
    Dann haben wir es. Danke ihr zwei. Gute Nacht. Stefan
  • Brauche Hilfe mit Blockly

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    2k Aufrufe
    M
    @Matzebhv: Hier ist das Problem beschrieben: http://forum.iobroker.net/viewtopic.php … 6&start=20 Und das ist die Lösung dafür: ` > So, habe es herausgefunden. Warum auch immer das in dem einen DP nicht gestimmt hat. Bei dem funktionierendem DP -> "name": "javascript.0.TESTDP2", Bei dem nicht funktionierendem DP -> "name": "TESTDP", Der Name ist hier nicht vollständig. Nach abändern in -> "name": "javascript.0.TESTDP", lässt sich der DP korrekt einbinden. ` Gruß Matze ` Das war es. Ich habe einfach ne namen "Power" in "javascript.0.Power" umbenannt, auch wenn es kein Javascript ist. Nun konnte ich es auch in der Cloud hinzufügen und der Receiver geht per Sprachbefehl an und aus. Vielen Dank dafür! VG Modjo
  • ScriptEnabled unter Javascript.0 fehlt

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    966 Aufrufe
    Paulchen67P
    Habe es hinbekommen. Habe einfach die Objektstruktur als JSON Datei heruntergeladen und ins neue System hochgeladen.
  • Blockly Zeitplan für URL - Hört nicht auf

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    945 Aufrufe
    R
    So könnte das klappen! :) @Highpressure: hab bislang blockly noch nie verwendet, bin ein copy&paste script kiddy im großen und ganzen wenns um javascript geht. ` Ein geübter Anwender oder gar Profi bin ich auch (noch) nicht, aber ich probiere halt viel aus, bevor ich nachfrage! :D Übung macht den Meister! Enrio

354

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge