Weiter zum Inhalt

ioBroker Allgemein

29.7k Themen 438.1k Beiträge
Integrationtsplattform für IoT

NEWS

  • [Gelöst] text2command mit Telegram: verkettete Befehle...?

    2
    0 Stimmen
    2 Beiträge
    405 Aufrufe
    HiltexH
    Ich habs hinbekommen :) Laut der Github-Doku des Adapters kann man Regeln auch per Script verarbeiten: https://github.com/ioBroker/ioBroker.text2command#external-rules-with-javascript Das Script reagiert immer auf Telegram-Eingaben, wird aber tatsächlich nur dann aktiv, wenn es das wirklich soll. Und so sieht es dann aus: [image: 1660131406334-project-name.gif] (sorry für die schlechte Qualität, das Original war viel zu groß für einen Upload hier) Der initiale Aufruf erfolgt über den text2command-Adapter: [image: 1660129164155-bildschirmfoto-2022-08-10-um-12.59.08-resized.png] Damit bei einem Neustart das Script nicht in einen undefinierten Zustand fährt, wird intern nochmal abgefragt, ob wirklich der Befehl gesendet wurde. Man kennt das ja, die ganzen Tastaturscripte werden ausgeführt, sobald man den Javascript-Adapter neustartet, wenn man keine Vorkehrungen trifft. Der Rest erklärt sich glaube ich von selbst. Was jetzt natürlich noch geschehen muss ist, dass das eingegebene Datum weiterverarbeitet werden muss, aber das ist ja ein ganz anderes Thema. Das Script benötigt diese Datenpunkte (bitte manuell anlegen): 0_userdata.0.Telegram.text2command.datePicker_Datum -> String 0_userdata.0.Telegram.text2command.datePicker_Jahr -> Number 0_userdata.0.Telegram.text2command.datePicker_Monat -> Number 0_userdata.0.Telegram.text2command.datePicker_Tag -> Number 0_userdata.0.Telegram.text2command.textProcessor -> String oder mixed Letzterer muss auch in den Einstellungen des text2command-Adapters hinterlegt werden. var today = new Date(); var currentYear = today.getYear() + 1900; var currentMonth = today.getMonth(); var currentDay = today.getDate(); var currentWeekday = today.getDay(); const months = ['Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']; var year = 0; var month = 0; var day = 0; function go() { // Bei Auslösung Status schreiben damit klar ist, dass reagiert werden muss setState("0_userdata.0.Telegram.text2command.datePicker_Datum", 'running'); // Mit Jahreseingabe beginnen keyboardYear(); }; function keyboardYear () { // Tastatur für die Jahresauswahl zusammenbauen var yearKeys = [ [currentYear.toString(), (currentYear + 1).toString()], [(currentYear + 2).toString(), (currentYear + 3).toString()], ["Abbrechen", ""] ] // Tastatur senden sendTo('telegram.0', { text: 'Jahr wählen', reply_markup: { keyboard: yearKeys, resize_keyboard: true, one_time_keyboard: false } }); }; function keyboardMonth () { // Tastatur für die Monatsauswahl zusammenbauen var avMonths = new Array(11); var monthKeys = new Array(4); year = getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val; for (let i = 0; i < 12; i++) { if (year == currentYear) { if (i < currentMonth) { avMonths[i] = " "; } else { avMonths[i] = months[i]; } } else { avMonths = months; } } monthKeys[0] = avMonths.slice(0,4); monthKeys[1] = avMonths.slice(4,8); monthKeys[2] = avMonths.slice(8); monthKeys[3] = ["Abbrechen",""]; // Tastatur senden sendTo('telegram.0', { text: 'Monat wählen', reply_markup: { keyboard: monthKeys, resize_keyboard: true, one_time_keyboard: false } }); }; function keyboardDay () { // Tastatur für die Tagesauswahl zusammenbauen var days = new Array(); var dayKeys = new Array(8); year = getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val; month = getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val; let firstDay = new Date(year, month, 1).getDay(); let daysInMonth = new Date(year, month + 1, 0).getDate() // Tages-Array mit " " füllen, falls erster Tag nicht Montag if (firstDay == 0) { for (let i = 0; i < 6; i++) { days.push(" "); } } else if (firstDay > 1) { for (let i = 1; i < firstDay; i++) { days.push(" "); } } // Tage zum Array hinzufügen for (let i = 1; i <= daysInMonth; i++) { if (getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val == currentYear && getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val == currentMonth) { if (i < currentDay) { days.push(" "); } else { days.push(i.toString()); } } else { days.push(i.toString()); } } // Rest mit " " füllen for (let i = days.length; i < 42; i++) { days.push(" "); } dayKeys[0] = ['M','D','M','D','F','S','S']; dayKeys[1] = days.slice(0,7); dayKeys[2] = days.slice(7,14); dayKeys[3] = days.slice(14,21); dayKeys[4] = days.slice(21,28); dayKeys[5] = days.slice(28,35); dayKeys[6] = days.slice(35); dayKeys[7] = ["Abbrechen"]; // Tastatur senden sendTo('telegram.0', { text: 'Tag wählen', reply_markup: { keyboard: dayKeys, resize_keyboard: true, one_time_keyboard: false } }); }; // Auf Eingabe reagieren on({id: "0_userdata.0.Telegram.text2command.textProcessor", change: "ne"}, async function (obj) { try { var task = JSON.parse(obj.state.val); // Start if (isNaN(task.command) && task.command == "Abwesenheit planen") { go(); } // Jahr eingegeben else if (!isNaN(task.command) && task.command >= currentYear && getState("0_userdata.0.Telegram.text2command.textProcessor").val != "" && getState("0_userdata.0.Telegram.text2command.datePicker_Datum").val == 'running' && getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val == 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val == 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Tag").val == 0) { // Jahr abspeichern setState("0_userdata.0.Telegram.text2command.datePicker_Jahr", Number(task.command), true); //Bestätigung an textProcessor setState("0_userdata.0.Telegram.text2command.textProcessor", 'Jahr gespeichert', true); // Monat aufrufen keyboardMonth(); } // Monat eingegeben else if (isNaN(task.command) && getState("0_userdata.0.Telegram.text2command.textProcessor").val != "" && getState("0_userdata.0.Telegram.text2command.datePicker_Datum").val == 'running' && getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val > 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val == 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Tag").val == 0) { // Monat abspeichern setState("0_userdata.0.Telegram.text2command.datePicker_Monat", months.indexOf(task.command), true); //Bestätigung an textProcessor setState("0_userdata.0.Telegram.text2command.textProcessor", 'Monat gespeichert', true); // Tag aufrufen keyboardDay(); } // Tag eingegeben else if (!isNaN(task.command) && getState("0_userdata.0.Telegram.text2command.textProcessor").val != "" && getState("0_userdata.0.Telegram.text2command.datePicker_Datum").val == 'running' && getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val > 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val > 0 && getState("0_userdata.0.Telegram.text2command.datePicker_Tag").val == 0) { //Tag abspeichern setState("0_userdata.0.Telegram.text2command.datePicker_Tag", Number(task.command), true); //Bestätigung an textProcessor setState("0_userdata.0.Telegram.text2command.textProcessor", 'Tag gespeichert', true); //Datum zusammenbauen und in Datenpunkt schreiben setState("0_userdata.0.Telegram.text2command.datePicker_Datum", getState("0_userdata.0.Telegram.text2command.datePicker_Jahr").val + "-" + (getState("0_userdata.0.Telegram.text2command.datePicker_Monat").val + 1) + "-" + getState("0_userdata.0.Telegram.text2command.datePicker_Tag").val , true); //Einzel-DP für Datum zurücksetzen setState("0_userdata.0.Telegram.text2command.datePicker_Jahr", 0, true); setState("0_userdata.0.Telegram.text2command.datePicker_Monat", 0, true); setState("0_userdata.0.Telegram.text2command.datePicker_Tag", 0, true); //Bestätigung senden sendTo("telegram", "send", { text: 'Datum gespeichert' }); //zurück ins Hauptmenü setState("javascript.0.scriptEnabled.Telegram-Menu.000_menu", true); } //Abbrechen else if (isNaN(task.command) && task.command == "Abbrechen") { //Einzel-DP für Datum zurücksetzen setState("0_userdata.0.Telegram.text2command.datePicker_Jahr", 0, true); setState("0_userdata.0.Telegram.text2command.datePicker_Monat", 0, true); setState("0_userdata.0.Telegram.text2command.datePicker_Tag", 0, true); //Datum zurücksetzen setState("0_userdata.0.Telegram.text2command.datePicker_Datum", "", true); //Bestätigung an textProcessor setState("0_userdata.0.Telegram.text2command.textProcessor", 'Abbruch', true); //zurück ins Hauptmenü setState("javascript.0.scriptEnabled.Telegram-Menu.000_menu", true); } // Rückmeldung geben, dass das Script nicht reagieren wird else { setState("0_userdata.0.Telegram.text2command.textProcessor", '', true); } } catch { // do nothing } }); Was mich derzeit noch stört ist, dass im Log immer eine Warnung auftaucht, wenn ein Befehl gesendet wurde, auf den das Script nicht reagieren wird. Das halte ich aber für einen Bug, da die Rückmeldung, dass das Script nichts tun wird, ja korrekt ausgeführt wird. text2command.0 2022-08-10 13:27:06.692 warn Timeout for external processor: 0_userdata.0.Telegram.text2command.textProcessor Was mich außerdem stört ist, dass die Aufforderung zur nächsten Eingabe eher kommt, als die Bestätigung der letzten Eingabe. Das sieht im Chat-Verlauf echt komisch aus, aber ich habe noch keine Idee, woran das liegt und wie man das lösen könnte. Vielleicht kann das Ganze ja jemand gebrauchen - viel Spaß damit :) Für Verbessungsvorschläge bin ich offen, falls jemand welche hat.
  • Neuaufbau - Kein Recovery (NodeRed) mit BackitUp möglich

    3
    8
    4 Stimmen
    3 Beiträge
    879 Aufrufe
    mickymM
    Was lässt sich sonst zur 64-Bit Version sagen. Also der Speicherverbrauch ist tatsächlich spürbar um einiges höher (ca. 20%) - d.h. ich komme mit 80% schon nahe an die Systemgrenzen, das war vorher so knapp unter 60%. Die Grundlast was die CPU Last betrifft ist identisch Die Lastspitzen haben jedoch wesentlich abgenommen, die sind vorher auch mal deutlich über 50% gewesen und das ist nun nicht mehr der Fall. Insofern fühlt es sich performanter an. [image: 1660127424359-f78ece05-9f21-4b75-a0d7-4f496b96d40f-image.png]
  • USV per SNMP auslesen

    39
    1
    0 Stimmen
    39 Beiträge
    5k Aufrufe
    mcm1957M
    @roddief Danke für Feedback. Wenn dir bewußt ist was du tust ist es voll OK den Adapter einzusetzen. Ich wollte nur sicherstellen, dass ich niemand "verführe" einen wenig getesteten Adapter zu installieren und damit die Hausautomatisation lahmlege ohne des der / die BenutzerIn das selbst beheben kann. Schöne Grüße McM
  • Homekit Adapter - Dropdown Menü bleibt leer

    7
    0 Stimmen
    7 Beiträge
    216 Aufrufe
    Damrak2022D
    @lessthanmore in eigenen neuen Post verschoben
  • (Gelöst) Alexa, Lautstärke über zwei Buttons steuern

    3
    0 Stimmen
    3 Beiträge
    175 Aufrufe
    Damrak2022D
    @djmarc75 Dann war ich ja fast am Ziel. Nur ei Wert habe ich was falsches eingetragen - Danke
  • Flot: Diagramm nur bei Art "bei Änderung"

    24
    4
    0 Stimmen
    24 Beiträge
    812 Aufrufe
    R
    @homoran Ah jetzt verstehe ich das so langsam. Aggregation hat auch was mit der Auflösung und so zu tun. Vielen Dank für deine Geduld, du hast mir sehr geholfen.
  • Unterschied timeout und pause in Blockly

    pause timeout blockly
    35
    1
    0 Stimmen
    35 Beiträge
    15k Aufrufe
    X
    @paul53 Ich verstehe. Es waren natürlich zwei Variablem "timeout" vorhanden. In Blockly habe ich unter "Variablen" die Variable "timeout gelöscht. Jetzt fehlt mir allerdings der Block "timeout" das Du in Deinem Beispiel nutzt: [image: 1660056179662-5c155dc8-ec36-499b-9dbc-e0c69ee268f1-grafik.png] Wo bekomme ich den her? Edit: Habe es gefunden. Einfach einen Variablenblock einfügen und imDropDown dann "timeout" anwählen.
  • Anleitung Sonoff 4CH R2 flashen

    sonoff sonoff 4ch pro r2 sonoff tasmota
    16
    0 Stimmen
    16 Beiträge
    4k Aufrufe
    Basti97B
    @hohmannc ok ist auch einfacher als löten. :)
  • Trigger für Türöffner Mehrfamilienhaus

    7
    0 Stimmen
    7 Beiträge
    419 Aufrufe
    AsgothianA
    @flacedoo sagte in Trigger für Türöffner Mehrfamilienhaus: Hey zusammen, Ich bin auf der Suche nach einer eleganten Möglichkeit meinen Türöffner im Mehrfamilienhaus zu automatisieren, also in der Auto-Unlock Manier von Smart Locks. Bevor das Geschrei von Stromdiebstahl oder ähnlichem losgeht: Ich habe einen Türöffner der einen zusätzlichen, potenzialfreien Schalter zulässt der einfach nur zwei Drähte verbindet, an dem ich einen Shelly angeschlossen habe der wiederum an meiner normalen (gezählten) Stromversorgung hängt. Dadurch kann ich schon problemlos den Buzzer ansteuern. Jetzt aber zu meiner Frage: Wie könnte ich dieses elegant automatisch triggern lassen wenn ich unten an der Tür stehe? Ideen die ich bisher hatte wären in die Richtung iBeacon im Briefkasten von meinem iPhone aus erkennen lassen, oder andersherum irgendein Gerät dass mein iPhone erkennt und direkt eine Meldung an den ioBroker schickt. Bei letzterem ist besonders die WLAN Reichweite problematisch, bei ersterem bräuchte ich noch irgendeine zuverlässige App die das erkennt, und irgendeine Möglichkeit übers Internet (sicher) diesen State zu triggern. Habt ihr da irgendwelche kreativen Ideen / bewährte Lösungen die mir hier helfen könnten? Vielleicht auch etwas ganz anderes? Schon jetzt vielen Dank für eure Hilfe! Ich rate dringend davon ab irgend eine Automatik einzuführen die nur auf reine Anwesenheit triggert. Eine Trennung die scharf genug ist das sie erkennt das du vor der Tür stehst, nicht aber in der Wohnung bist ist komplex. Eine Anwendung die im Hintergrund auf deinem Telefon läuft und bei Erkennung eines Beacons direkt eine Aktion auslöst wird im Zweifelsfall die Batterie deines Telefons schnell leeren. Dazu kommt das Verhalten im Fehlerfall - wenn da der "Knopf" dauerhaft gedrückt bleibt weil das System glaubt du bist noch in der Nähe ist das nicht wirklich Sinnvoll. Beides kann bei den Nachbarn zu Verstimmung führen wenn die Haustür durch Deine "Automatik" automatisch offen steht. Wenn einer meiner Nachbarn das verursachen würde gäbe es sofort Streit. Zwischen dem "ich Klingel bei mir und die Tür geht auf" und "ich hol das Mobiltelefon aus der Tasche, mach die app auf und drück nen Knopf" ist nebenbei noch eine deutliche Trennung. Allerdings ist auch da das Problem des Erkennung das du unten vor der Tür klingelst (im Gegensatz zu "ein unliebsamer Besucher klingelt, du bist zu Hause und deine Elektronik macht die Tür auf). A. Nachtrag: Viele Türöffner reagieren auf eine dauerhafte Betätigung mit Hitzetod. Die Systeme sind auf kurzfristige Betätigung von wenigen Sekunden ausgelegt.
  • gelöst Redis conf ändern

    4
    0 Stimmen
    4 Beiträge
    380 Aufrufe
    W
    @aba320 Gilt generell für alle config-Dateien, die unter /etc/… liegen, dass die nur der root-User ändern darf. Also muss man da mit sudo ran, um sich für diesen Zweck mit root-Rechten auszustatten. Bitte aber NIEMALS generell als root anmelden. Und sudo nur, wenn es (wie hier) erforderlich ist! Gruss, Jürgen
  • Denon Adapter MainZone springt oft auf false

    1
    0 Stimmen
    1 Beiträge
    102 Aufrufe
    Niemand hat geantwortet
  • InfluxDB ständig Warnmeldungen

    3
    0 Stimmen
    3 Beiträge
    312 Aufrufe
    Y
    @mcu Vielen Dank für den Hinweis. Das werde ich mir mal anschauen.
  • Shelly im iobroker-Docker trotz macvlan nicht nutzbar

    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    S
    @harrym Ich müsste mich in der "box of shame" verstecken, bin aber noch die Aufklärung schuldig: Kurz nach dem Aufrüsten mit RAM (Erfolgserlebnis dank 2h Suche in einem Synology Forum) habe ich neue IP-Bereiche in meinem Netzwerk vergeben (auch dafür gab es zum Glück ein Unifi Forum) und naja was soll ich sagen... NAS und Shellys waren in unterschiedlichen Netzen :man-facepalming: Läuft jetzt alles wieder nach Neustart der Shellys.. danke für die Hilfe dennoch!
  • Fritzbox rückwärtssuche mit iobroker?

    fritzbox 7590 fritzfon
    15
    0 Stimmen
    15 Beiträge
    3k Aufrufe
    F
    @gargano Dein Post hat mir damals sehr geholfen. Mir ist aber aufgefallen, dass sich offenbar der Aufbau der Seite von www.dasoertliche.de geändert hat, wodurch die Rückwärtssuche nicht mehr funktioniert. Mit folgenden Anpassungen funktioniert es bei mir zumindest wieder: var url = 'https://mobil.dasoertliche.de/Themen?nummer='+ nummer; Folgender regulärer Ausdruck liefert bei mir dann den Namen bzw. die Firma zur Rufnummer: var matches = response.data.match('<h2 class="tao-cb tao-b\">(.*)<\/h2>'); Vielleicht hilft das dem einen oder anderen, so wie es mir damals geholfen hat. ;-)
  • [Windows] iobroker Update schlägt fehl, nicht mehr lauffähig

    9
    0 Stimmen
    9 Beiträge
    814 Aufrufe
    D
    @arteck Ahh ok, manchmal seh ich den Wald vor lauter Bäumen nicht. Ich hab jetzt mal noch einen Neustart nach dem Kopieren gemacht und seit dem rödelt er fleißt. Krallt sich auch allen RAM den er bekommen kann.. Seit dem System_Neustart erzeugt er jetzt auch riesige Logfils. Ich hab jetzt auch bemerkt, das er nach dem reinschieben der Datein nicht mehr unter localhost:8081 erreichbar, aber unter localhost:8081/erreichbar ist. Ich taste mich jetzt erstmal vor und schaue was da die riesigen Logfiles erzeugt und wo die Fehler liegen, ich melde mich wenn ich wieder Hilfe brauche. :) Danke schon mal! Zusammenfassung: Neustart nach dem Kopieren dem iobroker_data Ordner und ein / hinter den Adminzugang.
  • MQTT-Client verbinden mit MQTT-Server

    27
    2
    0 Stimmen
    27 Beiträge
    4k Aufrufe
    T
    @homoran sagte in MQTT-Client verbinden mit MQTT-Server: @tt-tom sagte in MQTT-Client verbinden mit MQTT-Server: also den Port auf 1884 stellen und Websocket aktivieren , funktioniert so nicht. bin da nich so sicher hast du den port bei beiden verändert? ja bei beiden aktiviert und 1884 eingestellt. könnte auch heißen dass du 1883 einstellen und bei nutzung von websockets trotzdrm 1884 aufrufen musst installiere grade den WebSocket-Adapter, der hat als Standardport 8084 zu stehen. Edit: bekomme Websocket auf dem Hauptsystem nicht zum laufen. Ohne WebSocket läuft es ja. danke nochmal.
  • 0 Stimmen
    4 Beiträge
    528 Aufrufe
    AcguaA
    @feuersturm Super, vielen Dank. Auch für den Tipp bezüglich Skripte.
  • Alexa, Speak Command immer mit Volume Command

    Verschoben communication blockly javascript
    3
    0 Stimmen
    3 Beiträge
    435 Aufrufe
    AlexAxelA
    @frankyboy73 Wahnsinn, funktioniert ! Megaglücklich. Bierchen geht auf meinen Nacken !! :-)
  • wie binde ich meinen BLE Sensor richtig ein?

    11
    2
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    E
    @clixmaster said in wie binde ich meinen BLE Sensor richtig ein?: Jetzt funktioniert alles wie gewünscht SUPER, freut mich! Und wenn die Batterien zu schnell leer werden, kannst immer noch auf die pvvx-Version wechseln ;)
  • Frage zu influxdb.0 'update'

    8
    0 Stimmen
    8 Beiträge
    688 Aufrufe
    E
    @spacerx said in Frage zu influxdb.0 'update': Oder löschen und an der Position in der Messreihe den korrekten Wert einfügen. Ich würde den falschen Datensatz löschen (keine Ahnung wie das bei Influx2 geht), TS sichern oder einfach Epoch-Time berechnen (https://www.epochconverter.com/) und wie in deinem Beispielscript beschrieben, den richtigen Wert zur passenden Zeit neu schreiben. Aber geht das nicht einfacher über das Influx2 Webinterface?

571

Online

32.9k

Benutzer

83.0k

Themen

1.3m

Beiträge