Skip to content

Skripten / Logik

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

16.4k Themen 211.7k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    maxclaudiM
    @Mabbi sagte in Zendure SmartMode:1 SolarFlow2400 AC SolarFlow800 ( u. Pro): @maxclaudi Da gebe ich Dir recht. Mir ist in den Blocklys einfach immer noch nicht klar, wann eine Variable local (z.B. in einer function) oder global ist. Deswegen trenne ich die aus Prinzip immer auf. [image: 1763750944410-f1602dcb-2b11-44b2-a1bf-8171d463aa10-grafik.png] Das Bild zeigt das js zum Blockly mit getrennten Variablen oder mit einer Variable. Beides taucht oben und somit global(?) auf. Ja. Alles, was du in Blockly als Variable ohne lokalen Blockscope anlegst, landet im generierten JS oben im Script und ist damit global innerhalb dieses Scripts. Nicht global systemweit – nur im eigenen Script. Ich habe mal irgendwo gelesen, dass nichts in js parallel laufen kann, aber mir widerstrebt es rein aus technischer Sicht, es so zu machen. Nenn es eine Berufskrankheit. JS läuft immer single-threaded, aber in der ioBroker-Sandbox ist fast alles asynchron. Es läuft also nicht parallel – es wird nur über die Event-Loop nacheinander abgearbeitet.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    Dr. BakteriusD
    @topsurfer sagte in PNG zum "blinken bringen", mittels Blockly-Pause ... (?): Den Blink- Rhythmus kann man aber nicht dort einstellen, oder? Nein, dafür braucht es dann eine andere Lösung.
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • Ansteuerung eines Digital-Potentiometers (z.B. MCP4151)

    3
    0 Stimmen
    3 Beiträge
    205 Aufrufe
    geschildG
    @kurti Vielleicht hilft das hier weiter: https://github.com/fivdi/spi-device
  • Sonos Einschaltlautstärke bzw bei Stop zurückstellen

    5
    0 Stimmen
    5 Beiträge
    316 Aufrufe
    S
    habe es hinbekommen, jedoch etwas "simpler" [image: 1709757869831-scrnshot-sonos.png] geile Sache, vielen Dank!
  • (Gelöst) Telefonbuch ohne Fritzbox

    17
    0 Stimmen
    17 Beiträge
    980 Aufrufe
    W
    @paul53 So, abschließend noch kurz die Vollzugsmeldung. Alles funktioniert wie gehabt. Um nicht zwei Skripte (mein Blockly und das neue) laufen haben zu müssen, habe ich einfach mein bisheriges Blockly als Javascript ausgeben lassen und einfach quick&dirty vor das neue Script kopiert. Datenpunkte nochmal angepasst und läuft. Ich hatte gestern Nacht, als meine Frau im Bett war, noch versucht, das irgendwie eleganter zu machen, insbesondere nur mit einem Trigger und sauber mit idNummer und idName durchgehend, anstatt wieder auf die Datenpunkte zuzugreifen, aber da bin ich in reinem Javascript irgendwie nicht fit genug. Spätestens beim Versuch, davon dann erst aber der vierten Stelle auszulesen habe ich mich dann irgendwo in den Klammern verzettelt... :anguished: Unten das Gesamt-Script, wie es läuft, falls jemand mal sowas in der Art braucht. Und nochmal Danke an Alle. Ohne Eure Hilfe wäre das Ganze sicher noch weitaus uneleganter geworden. So gefällt es mir richtig gut und ich mach mich nun an das Eintragen von meinen Nummern und Namen. Gruss, Jürgen function subsequenceFromStartLast(sequence, at1) { var start = at1; var end = sequence.length - 1 + 1; return sequence.slice(start, end); } on({ id: [].concat(['0_userdata.0.Zustand.Anrufer-Name']), change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (compareTime('08:00', '22:00', 'between')) { if (('' + getState('0_userdata.0.Zustand.Anrufer-Name').val).indexOf('00') + 1 == 1) { if (('' + getState('0_userdata.0.Zustand.Anrufer-Name').val).indexOf('0049') + 1 == 1) { setState('javascript.0.Alexa-Text' /* Alexa-Text */, ('Anruf von 0' + String(subsequenceFromStartLast(('' + getState('0_userdata.0.Zustand.Anrufer-Name').val), 4))), true); } else { setState('javascript.0.Alexa-Text' /* Alexa-Text */, ('Anruf von 00' + String(subsequenceFromStartLast(('' + getState('0_userdata.0.Zustand.Anrufer-Id').val), 0))), true); } } else { setState('javascript.0.Alexa-Text' /* Alexa-Text */, ('Anruf von ' + String(getState('0_userdata.0.Zustand.Anrufer-Name').val)), true); } } }); const telBuch = { '1234567': 'Müller', '498934568': 'Heinz' }; const idNummer = '0_userdata.0.Zustand.Anrufer-Id'/*Anrufer-Id*/; const idName = '0_userdata.0.Zustand.Anrufer-Name'/*Anrufer-Name*/; on({ id: idNummer, change: 'any' }, function(dp) { let name = telBuch[dp.state.val]; if(!name) name = '00' + dp.state.val // unbekannter Name = Nummer setState(idName, name); }); EDIT: Script angepasst. Es muss bei den Telefonnummern 49 davor stehen.
  • Analogwerte via NodeRed an Loxone

    8
    3
    0 Stimmen
    8 Beiträge
    746 Aufrufe
    C
    @cocomp @cocomp Hallo, hoffe du liest das und kannst mir vielleicht helfen. Ich möchte Werte, so wie du, an Loxone senden aber irgendwie möchte das nicht so ganz bzw. ein mal sendet der iOBroker den Wert und dann nicht mehr. Hattest du das Problem auch schon mal ? Möchte gerne den Ladestand und die Reichweite meines ID.3 an Loxone senden, das funktioniert aber nur ein einziges mal und danach nicht mehr. Auch wenn ich das ganze manuell anstoße ändert sich zwar der Wert in Node-Red aber in Loxone ändert sich nichts. Erstelle ich dann wieder neue Virtuelle Eingänge und Konfiguriere diese in Node-Red funktioniert es wieder... aber nur das eine mal. [image: 1709576508361-9d4b772d-8bc5-4c09-bb13-6f10b90d00c4-grafik.png] Bin am verzweifeln. Vielleicht liest du das und kannst mir helfen =)
  • [gelöst] Javascript Testinstanz

    12
    1
    0 Stimmen
    12 Beiträge
    274 Aufrufe
    HomoranH
    @delphinis sagte in [gelöst] Javascript Testinstanz: Ach so! Deswegen die Frage @homoran sagte in [gelöst] Javascript Testinstanz: als Experte weisst du, was global bedeutet?
  • Einloggen auf Webseite und bedienen

    19
    8
    0 Stimmen
    19 Beiträge
    2k Aufrufe
    W
    Moin @all ✌🏼 Seit 3tagen wird nun auch keinen Wärmemenge mehr zur Smartset- App übertragen. Weder Fachmann noch auf normaler Ebene. Statistik ebenfalls negativ. Hat noch jemand das gleiche Problem? Nach Neustart der Heizung werden die Werte einmalig hochgeladen, aber nicht mehr aktualisiert. Wat is denn da bloß los bei denen 🫣 Grüße Tom
  • Fertiges Blockly zum Zählen der offenen Rolläden

    9
    3
    0 Stimmen
    9 Beiträge
    508 Aufrufe
    MartinPM
    @haus-automatisierung Schrieb ich ja, "akademische Diskussion"... Würde aber den Code auch sicher übersichtlicher machen, wenn man da gezielt nur die Deltas bearbeitet...
  • [gelöst] clearTimeout für Lichtsteuerung funktioniert nicht.

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    PeoplesP
    @jojos Wenn du drin rum läufst wird stetig neu getriggert und es bleibt an
  • Mail Text Ausgabe True oder False mit eigenen Text ersetzen

    5
    1
    0 Stimmen
    5 Beiträge
    329 Aufrufe
    Jörg 5J
    @martinp Danke... So easy? Scheibenkleister! Da hätte ich selbst drauf kommen können! Hab ganz ganz lieben Dank für die entfernung meines Brett vorm Kopf!!! EDIT: Lösung klappt wie erwartet. Noch mal Danke! Viele Grüße Jörg
  • HEOS Skript funktioniert nicht mehr

    8
    0 Stimmen
    8 Beiträge
    540 Aufrufe
    Meister MopperM
    @jwedenig sagte in HEOS Skript funktioniert nicht mehr: eigentlich hab ich eh noch Platz, oder? RAM ist dafür da, genutzt zu werden. Es frisst kein Gras. Sollte halt nicht knapp werden!
  • Parser: DSL Vergleich

    8
    1
    0 Stimmen
    8 Beiträge
    578 Aufrufe
    OliverIOO
    @haus-automatisierung Ja, das ist immer das Problem, wenn die Anbieter ihre Daten schützen wollen Generell wäre es auch möglich, in API Key herauszufinden, da ja das Java Skript sich den auch holen muss(falls er nicht fix definiert ist). Aber da kommt man in den aufwändigen Bereich, da man alles re-engineeren muss.
  • Adapter Fahrplan json-Daten als Tabelle in Jarvis

    3
    2
    0 Stimmen
    3 Beiträge
    418 Aufrufe
    A
    @mcu Hallo, danke mit Deiner Lösung hast Du mir sehr geholfen. Es funktioniert jetzt so wie ich es wollte.
  • Blockly sudo mit Passworteingabe

    5
    0 Stimmen
    5 Beiträge
    328 Aufrufe
    M
    @haus-automatisierung Das war vorher: drwxr-xr-x 7 iobroker iobroker Jetzt: drwxrwxr-x 7 iobroker iobroker Der Ordner wird via NFS, ggf auch wieder über CIFS / SMB geteilt. Der Ordner wird von einer externen Kamera via FTPd gefüllt. Es gibt nur den Benutzer iobroker. Kein anderer soll Zugriff haben. Siehst du eine Möglichkeit Berechtigungen zu reduzieren, wenn ja auch was (750)?
  • Bitfield übersetzen/konvertieren

    javascript
    19
    1
    0 Stimmen
    19 Beiträge
    2k Aufrufe
    wendy2702W
    @darkbrain85 sagte in Bitfield übersetzen/konvertieren: Hi! Ich habe ein kniffeliges Problem, bei dem ihr mir sicher behilflich sein könnte. Ich lese meine Waterkotte Wärmepumpe per Modbus aus. Dabei erhalte ich auch diverse Werte. Funktioniert sehr gut. Den Zustand einzelner Komponenten kann ich allerdings nur als bitfield in einem gemeinsamen Register abrufen. Hier erhalte ich einen Integer Wert den ich entsprechend interpretieren müsste. Hier mal die Liste aus der Doku: [image: 1578511613103-521d80f2-9fb9-4fa1-8e78-15e4b396b5bb-image.png] Ich müsste also den Integer Wert übersetzen und dann die einzelnen Zustände zuordnen. Beim Betrieb der Heizungsumwälzpumpe erhalte ich z.B. den Wert 2. Gibt es dafür irgendwo ein Beispiel, oder kann mir da jemand auf die Sprünge helfen? Danke Euch jetzt schon! Ist zwar schon was älter aber gerade erst gesehen. Kannst du mir sagen welche WP das ist, welches Register und wie eingestellt im Adapter? Hast du eine Übersicht über alle Register die man lesen/schreiben kann?
  • iobroker mit Waterkotte Ecotouch 5029 Ai

    6
    0 Stimmen
    6 Beiträge
    657 Aufrufe
    K
    @wendy2702 nee das hatte ich alles probiert. Entweder hat Waterkotte die Register geändert oder deren eigene Software berechnet die Energiebilanzen einfach selber. Meine Vermutung ist, dass sich lediglich bei dem Modell die Leistungsdaten auslesen lassen (das funktioniert übrigens) und ggf. von einem eigenem Script aufintegriert werden müssen, um die Energiewerte zu erhalten.
  • Blockly: Timeout/Intervall - einmaliges Ausführen

    3
    1
    0 Stimmen
    3 Beiträge
    153 Aufrufe
    S
    @paul53 Danke dir für deine Tipps! Ich werde es gleich ausprobieren.
  • Datenpunkt in der Vergangenheit schreiben

    2
    0 Stimmen
    2 Beiträge
    300 Aufrufe
    paul53P
    @achim_m sagte: Gibt es eine Möglichkeit, beim Schreiben eines Datenpunktes einen Timestamp anzugeben? on(idSrc, function(dp) { let ts = 7200000 * Math.floor(dp.state.ts / 7200000); // Abrunden auf gerade Stunden UTC setState(idDst, {val: dp.state.val, ack: dp.state.ack, ts: ts}); });
  • [gelöst] Skript Funktion wiederverwendbar machen

    14
    1
    0 Stimmen
    14 Beiträge
    962 Aufrufe
    PackElendP
    @init5 ich stehe vor einer ähnlichen Herausforderung. Ich habe 9 Jalousien zum ansteuern, das Skript ist immer das gleiche. Wenn ich es richtig verstehe, können Skripte nicht instanziert werden, sprich wenn der Timer läuft aber das Skript von einem anderen Trigger (bei dir Fenster auf), startet der Timer von neuem?
  • [Gelöst] CPU Temperatur von Proxmox VM

    monitoring javascript blockly
    129
    1
    0 Stimmen
    129 Beiträge
    27k Aufrufe
    arteckA
    @sherlock sagte in [Gelöst] CPU Temperatur von Proxmox VM: Außerdem sollte man auf keinem Fall iobroker in einem LXC installieren! das ist deine Assage.. ohne jegliche weitere Erklärung.. was hat das mit einem Profi oder Leien zu tun .. nopes... wenn du solche Aussage in die Welt setzt solltest du auch erklären warum nicht... es gibt auch andere Gründe als die von dir genannte... ein LXC ist nicht migrationsfähig..als Beispiel.. hat abe nix damit zu tun dass man im LXC keine iobroker installieren sollte... und ja ich gebe dir recht USB Geräte sind einfacher in eine VM zu durchreichen.. trotzdem läuft iobroker genausogut in einem LXC (vielleicht sogar besser da Ressourcen schonender)
  • DP Strucktur zur Lichtsteuerung

    3
    0 Stimmen
    3 Beiträge
    293 Aufrufe
    I
    Das heißt das du für jeden raum /Lampe ein separates Skript hast? Ja man hat dann viele Datenpunkte. Man könnte sich ja überlegen das man die Datenpunkte nur anlegt, wenn die Funktion benötigt wird und sonst nichts. Damit lässt sich bestimmt die Menge halbieren. Ich persönlich finde es sehr schön wenn meine skripte so geschrieben sind das ich wenn ich z.b. eine neue Lampe habe an den Skripten nichts geändert werden muss (maximal ein neustart). So das es reicht ein paar alias anzulegen und alles ist gut. Ich werde mal versuchen meine Struktur genauer auszuarbeiten und in einem Testsystem zu implementieren. Mal schauen wie gut das ganze klappt.

692

Online

32.4k

Benutzer

81.4k

Themen

1.3m

Beiträge