Weiter zum Inhalt

ioBroker Allgemein

29.9k Themen 440.2k Beiträge
Integrationtsplattform für IoT

NEWS

  • Datenpunkt über excel mit URL abrufen

    3
    0 Stimmen
    3 Beiträge
    348 Aufrufe
    VillarribaV
    @arteck ....ahhh, ich wusste, da war was! ....ich schau dann gleich mal nach wenn ich zuhause bin, nicht dass ich den Adapter versehentlich deaktiviert habe ... Das könnte der entscheidende Tip gewesen sein! ....manchmal steht man echt auf dem Schlauch ....
  • Performance Probleme im iobroker Admin auf pi4

    Verschoben
    111
    2
    0 Stimmen
    111 Beiträge
    16k Aufrufe
    Thomas BraunT
    @maxpd sagte in Performance Probleme im iobroker Admin auf pi4: (warum ist das Backup eigentlich 2x gezippt?) Ist es nicht. Wenn du tar.gz meinst jedenfalls nicht. Es ist 'getared' und dieses Archiv wurde dann anschließend mit gz gezippt. Und besser nicht mit dem 'notepad' aus Windows herumfuhrwerken, das Ding zerballert dir die Zeilenumbrüche.
  • [gelöst] Backitup findet ccu Backups nicht mehr

    6
    3
    0 Stimmen
    6 Beiträge
    626 Aufrufe
    simatecS
    @homoran Alles gut ... kein problem Rainer
  • Adapter smartgarden Fehler 403

    33
    0 Stimmen
    33 Beiträge
    7k Aufrufe
    B
    @reutli Vielen Dank für Deine Antwort. Über den Brücken- und Feiertag bin war ich abwesend. Guess what - die Daten kommen einfach wieder. Ich habe nichts verstellt. Alles blieb so und der 403 ist gone. Komischer Sache. Ich behalte das im Blick.
  • 0 Stimmen
    48 Beiträge
    9k Aufrufe
    Thomas BraunT
    @homoran sagte in [gelöst] ioBroker Wiederherstellung mit Backitup: Selbst wenn man bedenkt, dass sie von 2019 ist. Hab ich erst gesehen, als ich es schon geschrieben hatte. Wollte es aber auch nicht mehr redigieren.
  • Anleitung Zigbee2MQTT Einrichtung im ioBroker

    Verschoben
    28
    0 Stimmen
    28 Beiträge
    17k Aufrufe
    ?
    @arteck [image: 1696404780163-22c55b12-7e09-442a-8d11-b0d4e08fbf67-image.png] [image: 1696404801825-dcc220cc-f784-4502-a631-20e414714e97-image.png] [image: 1696404852949-b77244c3-d440-4d1f-946f-c173171a3d62-image.png] [image: 1696404904577-098ef72b-e1dd-4f98-8c50-d5b2d443bb6d-image.png] ezsp dürfte auch nicht gehen, ich habe hier ja die PRO-Ausführung, nicht die normale. https://zigbee.blakadder.com/Sonoff_ZBBridge.html [image: 1696408041870-6d5f4741-c15f-46aa-96e1-3277b7464528-image.png]
  • Waschmaschine Kosten pro Waschgang

    2
    0 Stimmen
    2 Beiträge
    315 Aufrufe
    HomoranH
    @cynric10 sagte in Waschmaschine Kosten pro Waschgang: Mir fehlt hier etwas der Ansatz wo und wie ich das machen könnte. [image: 1696403130681-screenshot_20231004-090210_firefox.jpg]
  • Kalender von Website auslesen

    parser website auslesen kalender ical adapter
    28
    0 Stimmen
    28 Beiträge
    4k Aufrufe
    liv-in-skyL
    @andrenaether ich glaube, ich habe den fehler gefunden - tritt erst auf, wenn die 2te anlage auch daten enthält - sieht im google-cal wieder so aus: [image: 1696394814180-image-115.png] die telegram-sache hat ja eh funktioniert: [image: 1696394882294-image-116.png] kopiere diesen teil bei dir ab zeile 14 (also dein setting darüber im script behalten) mal rein mache vorher eine kopie des jetzigen scriptes - zur sicherheit diese änderung gilt nur für den innenbereich (halle) - der andere bereich braucht uch noch andere änderungen !!!!! [image: 1696395305948-image-117.png] teil-script für import - nur innenbereich script async function doit(){ theJson=[]; myCalArr=[]; myCalArrTomorrow=[]; myCalArrTomorrowAlarm=[]; countAlarm=0; await getData(); //log(gesucht[0]) //log(String(gesucht.length)) for(let i=0;i<gesucht.length;i++){ let mytime=gesucht[i].replace(/.*new Date\((.*?)\).*/,"$1").split(","); let theDauer=gesucht[i].replace(/.*new Date\(.*?\)\, (.*?)\,.*/,"$1").replace(/00000/,""); let myDauer=getDauer(theDauer) let mydatum=mytime[2]+"."+String(Number(mytime[1])+1)+"."+mytime[0]; let myzeit; let theOrt=String(gesucht[i].replace(/.*new Date\(.*?\)\, .*?\, \[\'(.)\'\].*/,"$1")); //log("ORT - "+theOrt) let todayDay=formatDate(getDateObject((new Date().getTime())), "T.M.JJJJ"); // log(mydatum+ "---" + theDauer+ "---" + myDauer) mytime.length==4 ? myzeit=mytime[3]+":"+"00" : myzeit=mytime[3]+":"+mytime[4]; //let mydauer=Number(gesucht[i].replace(/.*new Date\(.*?\)\, (.*?)\,.*/,"$1"))/100000; //log(mydauer) theJson.push({ "zeit":myzeit, "datum":mydatum, "ereignis":gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "), "dauer":getDauer(theDauer) }) //if (i<5){ myCalArr.push({ "start":mydatum+" "+ myzeit, "end":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)), "summary":gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," "), "description":"from IOB Script" }) if(todayDay===mydatum && theOrt == "1" ){ //log(todayDay+" - "+theOrt) myCalArrTomorrow.push({ "start":mydatum+" "+ myzeit, "end":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)), "summary":gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "), "description":"from IOB Script" }) if (countAlarm==0){ // einmal bei alarm ersten werte ins array myCalArrTomorrowAlarm.push({ "start":mydatum+" "+ subtract15MinutesFromTime(myzeit,15), "end":mydatum+" "+ subtract15MinutesFromTime(myzeit,10), "summary":"ALARM:"+gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "), "description":"from IOB Script" }) } countAlarm ++; let mytimeAnfangNext; if(i+1<gesucht.length){ mytimeAnfangNext=gesucht[i+1].replace(/.*new Date\((.*?)\).*/,"$1").split(",");} else { mytimeAnfangNext=gesucht[i].replace(/.*new Date\((.*?)\).*/,"$1").split(",");} let myzeitAnfangNext; mytimeAnfangNext.length==4 ? myzeitAnfangNext=mytimeAnfangNext[3]+":"+"00" : myzeitAnfangNext=mytimeAnfangNext[3]+":"+mytimeAnfangNext[4]; // log(myzeitAnfangNext) // log(add15MinutesToTime(myzeit,getDauer(theDauer))) if(calculateTimeDifferenceInMinutes(add15MinutesToTime(myzeit,getDauer(theDauer)),myzeitAnfangNext)>3000 ){ // log(Number(calculateTimeDifferenceInMinutes( add15MinutesToTime(myzeit,getDauer(theDauer)),myzeitAnfangNext))) myCalArrTomorrowAlarm.push({ "start":mydatum+" "+ subtract15MinutesFromTime(myzeitAnfangNext,5), "end":mydatum+" "+ subtract15MinutesFromTime(myzeitAnfangNext,1), "summary":"ALARM:"+gesucht[i+1].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "), "description":"from IOB Script" }) } else{ if(i+1<gesucht.length){ myCalArrTomorrowAlarm.push({ "start":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)), "end":mydatum+" "+ add15MinutesToTime(add15MinutesToTime(myzeit,5),getDauer(theDauer)), "summary":"ALARM:"+gesucht[i+1].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/g," "), "description":"from IOB Script" }) } else{myCalArrTomorrowAlarm.push({ "start":mydatum+" "+ add15MinutesToTime(myzeit,getDauer(theDauer)), "end":mydatum+" "+ add15MinutesToTime(add15MinutesToTime(myzeit,5),getDauer(theDauer)), "summary":"ALARM:"+" Letzte Aktion", //gesucht[i].replace(/.*\[\'1\'\]\, \"(.*?)\"\, \"00000001\"\,.*/,"$1").replace(/\\r\\n/," ") "description":"from IOB Script" }) } } } //} } //log(JSON.stringify(myCalArr)); //myCalArrTomorrowAlarm=myCalArrTomorrowAlarm.slice(0,-1); //löscht letzten eintrag aus Alarm Array //log(JSON.stringify(myCalArrTomorrowAlarm)); //setState(myDP,JSON.stringify(theJson)); //toCalender(myCalArr); //toCalender(myCalArrTomorrow,myKalender,instanz); if (!wiederholung) {toCalender(myCalArrTomorrowAlarm,myKalenderAlarm,instanzAlarm); toCalender(myCalArrTomorrow,myKalender,instanz); // log("in nicht wiederholung - einmal morgens") myOldArrAlarm=myCalArrTomorrowAlarm setState(myDPOldArrayAlarm,JSON.stringify(myOldArrAlarm)); } else{ let changeDetails = findChanges(JSON.parse(getState(myDPOldArrayAlarm).val),myCalArrTomorrowAlarm) console.log(changeDetails); myOldArrAlarm=myCalArrTomorrowAlarm setState(myDPOldArrayAlarm,JSON.stringify(myOldArrAlarm)); if(changeDetails.length>0) {log(JSON.stringify(changeDetails)) for (let i=0;i<changeDetails.length;i++){ if(changeDetails[i].action=="added" || changeDetails[i].action=="changed" ) {toCalender([changeDetails[0]],myKalenderAlarmAenderung,instanzAlarmAenderung); } } }setState(myDPOldArrayAlarm,JSON.stringify(myCalArrTomorrowAlarm)); } } async function getData(){ return new Promise(async (resolve, reject) => { await request(url, async function (error, response, result) { gesucht=""; const myregex = /^this\.AddAppointment.*$/gm; gesucht=result.match(myregex); //log(gesucht) gesucht=gesucht.filter(platz => platz.includes("['1']")); //log(gesucht) if (gesucht!="" && error==null) {resolve()} else {reject()} ; }).on("error", function (e) {console.error(e);}); }); } schedule("1 5 * * *", async function () { wiederholung=false; doit(); }); /*schedule("3,33 5-23 * * *", async function () { wiederholung=true; doit(); });*/ //wiederholung=false; doit(); function toCalender(myArr,Kalender,myInstanz){ sendTo("webcal."+myInstanz, "addEvents", { calendar: Kalender, events: myArr }) } function add15MinutesToTime(time,howLong) { const [hours, minutes] = time.split(":").map(Number); let totalMinutes = hours * 60 + minutes; totalMinutes += howLong; const newHours = Math.floor(totalMinutes / 60); const newMinutes = totalMinutes % 60; const formattedNewHours = newHours < 10 ? `0${newHours}` : newHours; const formattedNewMinutes = newMinutes < 10 ? `0${newMinutes}` : newMinutes; return `${formattedNewHours}:${formattedNewMinutes}`; } function subtract15MinutesFromTime(time,howLong) { const [hours, minutes] = time.split(":").map(Number); let totalMinutes = hours * 60 + minutes; totalMinutes -= howLong; if (totalMinutes < 0) { totalMinutes += 24 * 60; // Falls die Zeit negativ wird, füge 24 Stunden hinzu } const newHours = Math.floor(totalMinutes / 60); const newMinutes = totalMinutes % 60; const formattedNewHours = newHours < 10 ? `0${newHours}` : newHours; const formattedNewMinutes = newMinutes < 10 ? `0${newMinutes}` : newMinutes; return `${formattedNewHours}:${formattedNewMinutes}`; } function getDauer(dauer){ // const minChange=[{"18":30},{"27":45},{"36":60},{"45":75},{"54":90},{"63":105},{"72":120},{"81":135},{"90":150},{"99":165},{"108":180}]; // log(String(minChange["18"])) return (dauer/9)*15 } function calculateTimeDifferenceInMinutes(startTime, endTime) { const [startHours, startMinutes] = startTime.split(":").map(Number); const [endHours, endMinutes] = endTime.split(":").map(Number); const totalStartMinutes = startHours * 60 + startMinutes; const totalEndMinutes = endHours * 60 + endMinutes; let timeDifference = totalEndMinutes - totalStartMinutes; if (timeDifference < 0) { timeDifference += 24 * 60; // Falls die Differenz negativ wird, füge 24 Stunden hinzu } return timeDifference; } /* function findChanges(oldArray, newArray) { const changes = []; newArray.forEach(newItem => { const oldItem = oldArray.find(item => item.start === newItem.start); if (!oldItem) { changes.push({ start: newItem.start, action: "added" }); } else { const changedKeys = Object.keys(newItem).filter(key => oldItem[key] !== newItem[key]); if (changedKeys.length > 0) { changes.push({ start: newItem.start, action: "changed", keys: changedKeys }); } } }); oldArray.forEach(oldItem => { const newItem = newArray.find(item => item.start === oldItem.start); if (!newItem) { changes.push({ start: oldItem.start, action: "deleted" }); } }); return changes; } */ function findChanges(oldArray, newArray) { const changes = []; newArray.forEach(newItem => { const oldItem = oldArray.find(item => item.start === newItem.start); if (!oldItem) { changes.push({ ...newItem, action: "added" }); } else { const changedKeys = Object.keys(newItem).filter(key => oldItem[key] !== newItem[key]); if (changedKeys.length > 0) { const changeDetails = { ...newItem, action: "changed", changedKeys }; changes.push(changeDetails); } } }); oldArray.forEach(oldItem => { const newItem = newArray.find(item => item.start === oldItem.start); if (!newItem) { changes.push({ ...oldItem, action: "deleted" }); } }); return changes; }
  • Kann mir jemand zu dieser Fehlermeldung einen Hinweis geben?

    21
    2
    0 Stimmen
    21 Beiträge
    2k Aufrufe
    B
    @dp20eic Moin Bernd, danke für die ausführliche Anleitung. So ganz easy erscheint es mir aber dennoch nicht. Bisher ist der Fehler nicht wieder aufgetaucht. Ich warte noch mal ab. Anderenfalls werde ich sicher noch mal nachfragen VG Ingo
  • Reboot Erkennung

    7
    0 Stimmen
    7 Beiträge
    614 Aufrufe
    HomoranH
    @thomas-braun sagte in Reboot Erkennung: @homoran Ist 'Zum Slave' eigentlich deine Stammkneipe? nöö, das ist mir zu link
  • Selektor für gruppierte Funktionen

    3
    1
    0 Stimmen
    3 Beiträge
    370 Aufrufe
    S
    @paul53 Danke dir. Finde ich irgendwie unglücklich, da man nach Umsortierung von Funktionen in andere Ordner dann auch die Abfragen ändern muss. Aber gut, gibt schlimmeres.
  • Funktionsweise Shuttercontrol

    8
    0 Stimmen
    8 Beiträge
    301 Aufrufe
    paul53P
    @mika-0 sagte: Also das könnte ich ja auch über meine SPS realisieren. Ja, wenn du es kannst.
  • Changelog in Vis (Anwender) darstellen

    2
    0 Stimmen
    2 Beiträge
    110 Aufrufe
    HomoranH
    @mika-0 mal als Stichworte: eventlist-widget eigenen Datenpunkt vom typ String angebunden an ein Input-Widget Datenpunkt loggen eventlis-widget darauf konfigurieren ergibt dann so etwas [image: 1696324341412-screenshot_20231003-111158_firefox.jpg] hier wird der Inhalt allerdings per Blockly befüllt
  • Update / Hinweis im Log

    2
    0 Stimmen
    2 Beiträge
    271 Aufrufe
    Thomas BraunT
    @ljsven sagte in Update / Hinweis im Log: /bin/sh: 1: mysqldump: not found Da dürfte lokal ein Paket fehlen. Schau Mal in das Backitup-Wiki rein, dass steht drin was fehlt Zum ersten: iob upload all
  • Zeitversatz zwischen State-Zeit und der Zeit einer Messung

    10
    1
    0 Stimmen
    10 Beiträge
    822 Aufrufe
    S
    @ticaki Wenn das funktioniert, ist es exakt das, was ich gesucht habe. Danke! Habe ich so aus der Doku nicht herausgelesen. Der Source scheint dies aber zu bestätigen. Werde ich dann testen. Danke!
  • Neue icons für dasWetter

    daswetter
    52
    0 Stimmen
    52 Beiträge
    11k Aufrufe
    S
    @djmarc75 Vielen Dank
  • E-Mail-Adapter und Dateianhänge

    10
    0 Stimmen
    10 Beiträge
    885 Aufrufe
    haus-automatisierungH
    @penumbra sagte in E-Mail-Adapter und Dateianhänge: Im Outlook und Thunderbird wird alles richtig angezeigt. Nur in der GMX-App sowie in der Web-Version haut es nicht hin. Das hab ich schon verstanden - daher ja die Idee die Mail genauer anschauen (wie die MIME-Types / Header usw aufgebaut sind, Reihenfolge der Attachments usw.). Dafür bräuchte man nur die RAW Mail als Text - und nicht das was ein Client daraus zaubert als Screenshot :) Also eine funktionierende Variante und die nicht funktionierende Mail auf GMX.
  • FLOT nicht mehr aufrufbar - Warnung im Protokoll

    Verschoben
    60
    0 Stimmen
    60 Beiträge
    5k Aufrufe
    K
    @homoran Aliase funktionieren Danke das war es mit den 3 x 3 Pixeln :-) Klasse :-) [image: 1696248643714-9c2072b6-a58e-4220-8b9e-a8d4e7623031-image-resized.png]
  • kann vis nicht installieren

    29
    0 Stimmen
    29 Beiträge
    4k Aufrufe
    L
    @Homoran Ich habe Mut zur Lücke bewiesen und den Befehl iob del vis ausgeführt. Danach ließ sich der Adapter neu installieren und das File war noch da.
  • Deconz Adapter hält keine Verbindung zu Conbee II

    connection error deconz
    3
    0 Stimmen
    3 Beiträge
    560 Aufrufe
    Franz DelcuveF
    @marc-berg Hi Marc, vielen Dank für den Hinweis. Ich habe den Container angepasst, jetzt funktioniert die Verbindung. Viele Grüße

281

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge