Weiter zum Inhalt

Blockly

6.6k Themen 80.5k Beiträge

Hilfe für Skripterstellung mit Blockly

NEWS

  • Sprachausgabe Sonos

    4
    1
    0 Stimmen
    4 Beiträge
    198 Aufrufe
    T
    @djmarc75 hallo genau habe es jetzt so gelöst: Wenn beim starten vom Skipt der Lautsprecher aus ist soll nach Verzögerung von 15 sec wieder ein false kommen.
  • [gelöst] Gestriges Datum zu best. Uhrzeit als Unix-Timestamp

    5
    0 Stimmen
    5 Beiträge
    191 Aufrufe
    David G.D
    @paul53 Cool, so klappt es. War mein Ansatz ja garnicht sooo falsch. Danke
  • BTC Benachrichtigung wenn Tausenderstelle sich ändert.

    11
    1
    0 Stimmen
    11 Beiträge
    826 Aufrufe
    paul53P
    @cinimod sagte: Hab ne Sperre gebastelt Ich dachte an solch eine Sperre: [image: 1674402657499-bild_2023-01-22_165055833.png]
  • Motioneye Bewegungserkennung abschalten

    3
    0 Stimmen
    3 Beiträge
    358 Aufrufe
    WszeneW
    @crunchip sagte in Motioneye Bewegungserkennung abschalten: @wszene sagte in Motioneye Bewegungserkennung abschalten: möchte ich gern vorher auf der VIS das ganze Abschalten https://forum.iobroker.net/post/613698 Das hat mir die Suche garnicht ausgespuckt Danke dir
  • Heizöltank Füllstand

    7
    0 Stimmen
    7 Beiträge
    783 Aufrufe
    K
    @semmy wo kommen denn die Sensordaten an? Der Sensor misst von oben auf die Öloberfläche? Der Sensor gibt den Abstand in cm aus? Dann braucht es noch den Sensorwert in cm bei vollem Tank. Man trigget auf den Datenpunkt des Sensorwerts https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state Man rechnet dann von Abstand Sensor zur Öloberfläche auf Füllstandshöhe (Level) um und füttert damit die function getVolume Das könnte funktionieren, konnte es aber nicht testen. Habe ja andere Datenpunkte. Und es ist meine Tanktabelle drin, mußt durch Deine ersetzen // Interpolation Tanktabelle // Tabelle Hans Tank 10 000 Liter /* Testscript currently not needed var res = null; { for (let x=-1; x<182; x=x+17.3){ res = getVolume(x); console.log('x: ' + x + ' Volume: ' + res); }; console.log('Test program executed'); }; Testscript currently not needed */ const sensorValueInCmId = 'hierMussDieAdresseDesDatenpunktsRein'; // richtige Adresse eintragen const tankVolumeLiterId = '0_userdata.0.power.tank.tankinhalt'; const abstandSensorZuOeloberflaecheWennVollInCm = 30; // richtigen Wert eintragen const maximaleTankfuellHoehe = 119; // aus Peiltabelle // Datenpunkt für Tankinhalt erzeugen createState(tankVolumeLiterId, undefined , false, { name: tankVolumeLiter, desc: 'total quantity in liter', type: 'number', unit: 'Liter', role: 'value' }); on(sensorValueInCmId, function (dp) { let sensorDistanceValue = dp.state.val; let distanceSensorToSurface = sensorDistanceValue - abstandSensorZuOeloberflaecheWennVollInCm; let fuellHoehe = maximaleTankfuellHoehe - distanceSensorToSurface; let tankInhalt = getVolume(fuellHoehe); setState(tankVolumeLiterId, tankInhalt); }); function getVolume(myLevel){ const tankVolume = [0, 8.409859784, 23, 43.5318943, 65, 93.30470164, 119, 153.9586423, 184, 223.5705811, 257, 300.8977322, 337, 385.04257, 424, 475.3122288, 510, 571.1472806, 615, 672.0811422, 718, 777.7149676, 827, 887.7011452, 939, 1001.731933, 1056, 1119.531332, 1177, 1240.849092, 1301, 1365, 1429, 1494, 1559, 1624, 1691, 1760, 1829, 1898, 1968, 2039, 2110, 2182, 2255, 2328, 2402, 2477, 2552, 2627, 2702, 2778, 2855, 2932, 3010, 3088, 3166, 3244, 3323, 3402, 3482, 3562, 3642, 3722, 3803, 3884, 3965, 4046, 4127, 4209, 4291, 4373, 4455, 4537, 4619, 4701, 4783, 4865, 4947, 5029, 5111, 5193, 5275, 5357, 5439, 5521, 5603, 5685, 5767, 5849, 5931, 6013, 6094, 6175, 6256, 6337, 6418, 6498, 6578, 6658, 6738, 6817, 6896, 6974, 7052, 7130, 7208, 7300, 7362, 7438, 7513, 7588, 7663, 7738, 7812, 7885, 7958, 8030, 8101, 8172, 8242, 8311, 8380, 8449, 8516, 8581, 8646, 8711, 8775, 8839, 8902, 8963, 9024, 9084, 9143, 9201, 9258, 9313, 9368, 9422, 9474, 9525, 9575, 9624, 9671, 9716, 9760, 9803, 9844, 9883, 9921, 9956, 9990, 10021, 10049, 10075, 10098, 10117, 10132, 10140, ]; const minLevel = 0; // min index const maxLevel = tankVolume.length -1; // max index let volume = 0; if(myLevel >= minLevel && myLevel <= (maxLevel +0.5)){ let truncLevel = Math.trunc(myLevel); if(truncLevel == maxLevel) { volume = tankVolume[truncLevel]; // top of table. Interpolation neither necessary nor possible } else { // inertpolation according https://en.wikipedia.org/wiki/Line_(geometry) ; https://de.wikipedia.org/wiki/Zweipunkteform /* y = (x-x1) * (y2-y1)/(x2-x1) +y1 y : volume */ let x = myLevel; let x1 = truncLevel; let x2 = truncLevel + 1; let y1 = tankVolume[x1]; let y2 = tankVolume[x2]; volume = (x-x1) * (y2-y1)/(x2-x1) +y1; }; return volume; } else{ // level out of range console.log('Error, level out of range: ' + myLevel); return null; }; };
  • [gelöst] DP beschreiben, wenn Wert zwischen >x und < y ist

    19
    2
    0 Stimmen
    19 Beiträge
    1k Aufrufe
    bahnuhrB
    @darkblu sagte in DP beschreiben, wenn ein Wert zwischen >x und < y ist: könntest du mir noch kurz erklären, was gegen den MHZ19B spricht ? Ich hatte immer Aussetzer nach oben; deshalb nehm ich diesen nicht mehr. Bin jetzt umgestiegen auf senseair S8; klappt viel besser.
  • Ständig änderte zahlen Addieren

    4
    0 Stimmen
    4 Beiträge
    356 Aufrufe
    D
    @paul53 Danke Super das haut hin . Vielen Dank
  • Nach Änderung von Wert -> Timer, Re-Check & Aktion

    6
    1
    0 Stimmen
    6 Beiträge
    586 Aufrufe
    H
    Als Abschluss für den Thread und weil ich mich bedanken möchte und interessierten Lesern später zeigen möchte, wie ich das zb. für meine Spülmaschine gelöst habe: [image: 1674285906569-e45dc7df-9d84-4250-8d5c-f60b6bfb3da3-image.png] Da ich zum einen ab und an komische Werte > 0W hatte, die entweder an dem Gerät, der Steckdose oder einfach daran liegen, dass jemand kurz die Maschine startet und das Programm dann doch nicht aktiviert, habe ich mich entschlossen einen Mechanismus einzubauen, der eben auch berücksichtigt, ob die Maschine bzw. das Programm ernsthaft gelaufen ist: Wenn ein Wert sich ändert und er ist über 100W (als Beispiel), dann können wir davon ausgehen, dass ein Programm läuft => Wir setzen eine definierte Variable auf "WAHR". Wenn ein Wert >0 aber < 100W als Veränderung gesehen wird, wird ein ggfs. laufender Timer gestoppt - ansonsten passiert nichts. Wenn eine Veränderung des Wertes dazu führt, dass der Wert 0 ist UND die definierte Variable "WAHR" ist, wird eine Nachricht geschickt - die Variable wird dann wieder auf "FALSCH" gesetzt. In dem Stil werde ich es auch mit der Waschmaschine machen und anderen Geräten, die in einem Programm ablaufen und als Kennzeichen haben einen gewissen Schwellwert (zb. für das Heizen) stets zu überschreiten - kleine Verbräuche die aus unterschiedlichsten Gründen auftauchen können, werden ignoriert.
  • Multitimeout - wie function übergeben von blockly in js

    15
    2
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    P
    @paul: ich poste mal den aktuellen Stand, macht inzwischen denke ich wieder Sinn: Eigentlich ist es nur ein "normaler Timeout-Block" der es ermöglicht einen funktionsaufruf zu verzoegern und dabei einen "dynamische" Bezeichnung hat, sodass das auch mit einem SelectorById-Trigger individuell in Blockly funktioniert. Es funktioniert nun auch mit dem "Multi-Timeout"... :) [image: 1674252663838-63c24a2c-7335-421b-b57d-cc2bac8d6281-image.png] die drei functions - wie bekomme ich die erste davon ganz weg...? // Beschreibe diese Funktion … async function timeout_handles_obj() { var timeout_handles = {}; /* // timeout_handles auslesen aus dp, falls er nicht existiert, dann erstellen: a = scriptName.split('.'); script_name = a.slice(-1)[0]; // Skriptname erfasst dp = "0_userdata.0.System.Timeouts.in_Skript_" + script_name; // wo die Timeouts gebackupt werden if ( !existsState(dp) ) { createState(dp, timeout_handles, { "name": "Timeout-Handles des Skripts", "desc": "Manuell erzeugt", "role": "state", "type": "object", "read": true, "write": true }, function () {}); } else { timeout_handles = getState(dp).val; // Timeout reinladen aus dp } console.log(getState(dp).val); */ return timeout_handles; } // Beschreibe diese Funktion … async function timeout_loeschen(trigger) { a = trigger.split('.'); b = a.slice(a.length - 2, a.length - 0); trigger_id = b.join('_'); // trigger_id = "trigger" gekürzt if( trigger_id in timeout_handles ) { clearTimeout(timeout_handles[trigger_id]); delete timeout_handles[trigger_id]; } } // Beschreibe diese Funktion … async function timeout_setzen(trigger, sek, funktion) { var obj = {}; //Name für den Timeout des Triggers erfassen: a = trigger.split('.'); b = a.slice(a.length - 2, a.length - 0); trigger_id = b.join('_'); // trigger_id = "trigger" gekürzt verzoegerung_ms = sek * 1000; // umrechnen obj[funktion] = funktion; // function in object zuordnen //Timeout setzen timeout_handles[trigger_id] = setTimeout(eval(obj[funktion]), verzoegerung_ms, trigger); /* // Skriptname erfassung und Timeouts backupen in DP: a = scriptName.split('.'); script_name = a.slice(-1)[0]; dp= "0_userdata.0.System.Timeouts.in_Skript_" + script_name; setState(dp, timeout_handles, true); // handles in dp backupen; */ }
  • RPI2 Adapter GPIO Ansteuerung funktioniert nicht

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    500 Aufrufe
    HomoranH
    @tombir sagte in RPI2 Adapter GPIO Ansteuerung funktioniert nicht: Jetzt funktioniert es. so muss es sein!
  • Datenpunkt ändern und wieder zurück ändern

    6
    0 Stimmen
    6 Beiträge
    366 Aufrufe
    HomoranH
    @darkblu sagte in Datenpunkt ändern und wieder zurück ändern: @homoran Danke, probiere ich morgen nochmal aus. und dann nicht direkt schreddern, sondern posten und fragen.
  • [gelöst] Blockly Sendto in CRON funktioniert nicht

    8
    1
    0 Stimmen
    8 Beiträge
    708 Aufrufe
    B
    @rscsb Perfekt! Herzlichen Dank! Hat funktioniert!
  • Zeitplan Wochentag prüfen?

    9
    1
    0 Stimmen
    9 Beiträge
    844 Aufrufe
    CodierknechtC
    @kaile45 sagte in Zeitplan Wochentag prüfen?: warum default und nicht direkt die Werte? Weil das nur ein Beispiel ist und das Prinzip verdeutlichen soll. Nicht jeder hat Zeit und Lust, Deinen Objektbaum nachzubasteln um damit einen passenden Screenshot zu machen.
  • Bewegungsmelder Skript fehlerhaft

    60
    1
    0 Stimmen
    60 Beiträge
    7k Aufrufe
    paul53P
    @13patrick37 sagte: Mit "AllOn" funktioniert alles. Ist nur blöd, dass sofort die Helligkeit auf 100% geht. Wenn "Level" hinterher geschickt wird (vlt. etwas verzögert) dürfte sich der Wert von "AllOn" nicht mehr ändern (true bleiben), also nicht getriggert werden. Oder geht dann der Wert kurz auf false? Der Debug-Log wird es zeigen. [image: 1674163333201-bild_2023-01-19_222211135.png]
  • Blockly Funktionswert auslesen anstatt Logikwert

    4
    1
    0 Stimmen
    4 Beiträge
    491 Aufrufe
    M
    @paul53 Danke das war der Hinweis :) return getObject(id).common.states[val]; [image: 1674156941216-1a63f907-6d76-4bdd-bc82-1f3c1b55ca62-image.png] Gelöst!
  • Blockly "Falls Objekt" ist mehr als wahr/falsch

    21
    1
    0 Stimmen
    21 Beiträge
    3k Aufrufe
    R
    @paul53 ja so werde ich es machen
  • Das Script um zwei weitere TRUE Abfragen erweitern

    5
    1
    0 Stimmen
    5 Beiträge
    397 Aufrufe
    CodierknechtC
    @djmarc75 sagte in Das Script um zwei weitere TRUE Abfragen erweitern: @codierknecht Objekt ID durch Wert ersetzen Ich Depp :man-facepalming: Ist korrigiert - Danke!
  • Datenpunkt schreiben bei Offline des Heizungsthermostat

    3
    0 Stimmen
    3 Beiträge
    324 Aufrufe
    M
    @arteck [image: 1674115558492-screenshot-2023-01-19-090515.png] [image: 1674115564849-screenshot-2023-01-19-090543.png] Das hätte ich bis jetzt , funktioniert aber nicht richtig.
  • Wie frage ich einen Wert ab?

    13
    1
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    giziG
    @paul53 danke!! :)
  • Es ist trocken Meldung kommt zu früh.

    9
    2
    0 Stimmen
    9 Beiträge
    356 Aufrufe
    G
    So sieht es besser aus. [image: 1674072054835-b00beaef-98a9-4e84-91d5-76f623285941-image.png]

316

Online

33.0k

Benutzende

83.7k

Themen

1.3m

Beiträge