Weiter zum Inhalt
  • Home
  • Aktuell
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Test Adapter Aura

NEWS

  • Monatsrückblick Oktober 2026 ist online!
    BluefoxB
    Bluefox
    3
    1
    69

  • Mitmachen: Sprich „ioBroker“ ein – für ein lokales Aktivierungswort
    BluefoxB
    Bluefox
    6
    1
    424

  • Neuer Blogbeitrag: KI in ioBroker, vom Helfer im Admin bis zum eigenen Smart Assistant
    BluefoxB
    Bluefox
    4
    1
    463

Test Adapter Aura

Geplant Angeheftet Gesperrt Verschoben Visualisierung
363 Beiträge 43 Kommentatoren 39.3k Aufrufe 49 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D dering

    Hallo zusammen,

    ich melde mich mal wieder mit neuen Features, die seit dem letzten Update dazu gekommen sind.

    🤖 KI-Assistent für Dashboards (Beta)
    Das größte Stück: Aura bringt jetzt einen eingebauten MCP-Server mit. Damit kann man sein Dashboard von einer KI bauen und umbauen lassen – „leg mir einen Tab Wohnzimmer an mit Licht, Rollladen und Temperatur", „mach die Kacheln schmaler", „kopier den Tab fürs Schlafzimmer". Widgets, Tabs, Bereiche, Popups, Gruppen und wiederverwendbare Vorlagen sind alle ansprechbar. Ein Schalter und ein Token in den Instanz-Einstellungen, fertig. Noch Beta, aber schon erstaunlich brauchbar.

    🔒 PIN-Schutz
    Bereiche und Tabs lassen sich mit einem Code schützen – egal ob man über das Menü, die Tab-Leiste, eine Klick-Aktion oder ein Lesezeichen dorthin kommt. Praktisch für das Wandtablet im Flur.

    🎨 Bedingungen (Conditions) deutlich ausgebaut
    Regeln färben nicht mehr nur die ganze Kachel: Titel, Icon und Wert lassen sich einzeln steuern – Text, Farbe, Icon, Größe, Sichtbarkeit. Dazu ein pulsierender Rahmen statt der blinkenden Karte, Randstärke/Radius/Transparenz – und eine Regel kann jetzt auch eine Meldung verschicken, bei Listen sogar eine pro auslösender Zeile.

    📋 Listen sind erwachsen geworden
    Die Zeilen-Darstellungen können jetzt alles, was die einzelnen Widgets können: Schalter, Schieberegler, Rollladen (inkl. Lamellen), Tasten, Datumsfeld und neu ein Auswahlfeld – jeweils mit dem kompletten Optionssatz. Dazu Icons pro Zeile oder listenweit, Trennlinien, ein Sortier-Dialog mit Kriterien-Kette, bessere Filter und Bedingungen pro Zeile. Eine dynamische Liste ersetzt damit oft ein halbes Dashboard.

    📊 Diagramme
    Gestapelte Flächen, Werte direkt an den Datenpunkten, gemischte Serien aus History und JSON auf einer Zeitachse (z. B. Messwerte + PV-Prognose), Zahlenformat pro Serie, Datumsfeld in der Tagesnavigation – und etliche Fixes rund um Verbrauchsbalken, zurücksetzende Zähler und Achsen.

    🧩 Platzhalter, die rechnen
    Im HTML- und Wert-Widget gibt es jetzt vis-kompatible Bindings inklusive Rechnungen und Zeitstempeln: {id;round(1)}, {a:id1;b:id2;a * b}, {id.lc;date(HH:mm)}.

    Und quer durch die Widgets
    Thermostat mit runder Skala, Mediaplayer erkennt jetzt jeden Adapter mit Standard-Media-Rollen (Yamaha, Denon, Volumio …), Bild-Widget zeigt rohes SVG (z. B. Gäste-WLAN-QR-Code), Karussell mit Beschriftung pro Zustand, Verteilung/Füllstand mit Referenz aus einem Datenpunkt und Warnfarbe, Statusübersicht erkennt Drehgriffkontakte.

    Meldungen selbst haben auch noch nachgelegt: HTML in Titel und Text, Sendezeit auf der Karte, sendTo-Beispiele im Admin und [[dp]]-Platzhalter, die beim Auslösen eingefroren werden – das Archiv zeigt also den Wert von damals, nicht den von jetzt.

    Installation und Doku: https://github.com/hdering/ioBroker.aura – Feedback und Issues sehr willkommen, die meisten der oben genannten Punkte kamen genau von dort.

    FredFF
    FredFF
    FredF
    Most Active Forum Testing
    schrieb am zuletzt editiert von
    #108

    @dering super wie es hier weiter geht.
    Eine bescheidene Frage: Aus welchem Grunde nutzt du nicht den MCP Server den ioBroker selbst anbietet?

    D 1 Antwort Letzte Antwort
    0
    • FredFF FredF

      @dering super wie es hier weiter geht.
      Eine bescheidene Frage: Aus welchem Grunde nutzt du nicht den MCP Server den ioBroker selbst anbietet?

      D
      D
      dering
      schrieb am zuletzt editiert von
      #109

      @FredF Der iobroker-mcp kennt ja nicht die Möglichkeiten die Aura anbietet. Der aura-mcp liefert dir das und die KI weiß dann was damit anzufangen.
      Man sollte aber beides verwenden. Mit dem iobroker-mcp bekommst du alle Datenpunkte und mit dem aura-mcp baust du dann ein Dashboard.

      Wer einen Kaffee spendieren will: https://paypal.me/HermannDering

      1 Antwort Letzte Antwort
      1
      • sigi234S
        sigi234S
        sigi234
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #110

        Hallo,

        kann mir wer erklären wie das mit dem AI assistant (MCP) geht ein Dasboard zu erstellen?

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        D 1 Antwort Letzte Antwort
        1
        • TbsJahT
          TbsJahT
          TbsJah
          schrieb am zuletzt editiert von
          #111

          An die Frage schließe ich mich an

          1 Antwort Letzte Antwort
          0
          • sigi234S sigi234

            Hallo,

            kann mir wer erklären wie das mit dem AI assistant (MCP) geht ein Dasboard zu erstellen?

            D
            D
            dering
            schrieb am zuletzt editiert von
            #112

            @sigi234 @tbsjah
            https://hdering.github.io/ioBroker.aura/einstellungen/mcp

            Wer einen Kaffee spendieren will: https://paypal.me/HermannDering

            JoJo58J 1 Antwort Letzte Antwort
            1
            • D dering

              @sigi234 @tbsjah
              https://hdering.github.io/ioBroker.aura/einstellungen/mcp

              JoJo58J
              JoJo58J
              JoJo58
              schrieb am zuletzt editiert von
              #113

              @sigi234 @dering @tbsjah

              Ich musste auch etwas suchen und hatte es falsch verstanden. Ich habe Claude Desktop installiert und das war falsch, der konnte auch nichts damit anfangen, wenn ich ihm sage er soll einen MCP Server hinzufügen. 🙂
              Man muss wirklich "Claude Code" haben. Ich habe das denn direkt über PowerShell installiert:

              irm https://claude.ai/install.ps1 | iex
              

              Dann kommt der Hinweis das man claude.exe noch zur Path Variablen hinzufügen muss.

              Claude dann über PS gestartet und da kommt dann auch die Abfrage, wie man sich anmelden will, da ich kein Pro oder so habe, habe ich API genommen, den nutze ich eh schon.
              Angemeldet, ein paar Dinge bestätigt, Claude neu gestartet und dann gings los.

              Als erstes sollte ein Tab MCP-Test mit einem Widget angelegt werden. Da es noch kein Layout gab, kam die Rückfrage, ob eines angelegt werden soll usw., danach wurde es auch gemacht.
              Zu Beginn muss man oft bestätigen, das man das zulassen will, aber das finde ich schon korrekt und muss sein.
              Als das Dashboard und der Tab angelegt waren, habe ich eine etwas schwierigere Aufgabe gestellt. 4 Widgets mit den Außentemperaturen.
              Es gab Nachfragen und ich hatte mehrere Änderungswünsche, aber es wurde alles umgesetzt und ein weiterer Tab wurde angelegt und dann wurde es witzig (oder spuki?), ich habe zugesehen, wie die Widgets erstellt wurden, die Werte ankamen, die Größe und Position geändert wurde usw..

              1fdf3c02-bb67-49aa-b8ad-a83352fe6f15-image.jpeg

              Ich bin begeistert, muss aber sagen, da ich über API abgerechnet werde, ist mir das dann doch etwas zu teuer. Wenn ich es weiter nutze, werde ich mir ein Claude Pro Konto zulegen, das kostet monatlich und da ist Code mit drin.

              Also wie schon gesagt, ich bin immer wieder begeistert von Aura und der ganzen Entwicklung die der Adapter da hinlegt.

              Gruß, Johannes

              Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
              Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
              Einfach ein tolles Hobby :-)

              1 Antwort Letzte Antwort
              1
              • B
                B
                beetle-fan
                schrieb am zuletzt editiert von
                #114

                Ich nutze seit neustem auch AURA und bin wirklich begeistern vom UI. Klar sind bei Vis2 die Möglichkeiten sicherlich noch viel größer/weiter, mir gefällt aber insb. das optische Ergebnis der AURA Dashboards - das sieht einfach von sich aus (für mich) ansprechender aus.

                Ich würde gerne ein älteres iPad Air als Dashboard-Gerät nutzen. Wenn ich das Dashboard über die URL aufrufe steht da allerdings immer "nicht verbunden" und es zeigt nichts an? An meinem iPad Pro funktioniert es hingegen, genauso wie am Laptop. Hat jemand eine Idee, woran das liegen kann?

                ioBroker in LXC auf Proxmox (Intel NUC) | CCU3 mit OpenCCU

                B 1 Antwort Letzte Antwort
                0
                • AgrippinenserA
                  AgrippinenserA
                  Agrippinenser
                  schrieb am zuletzt editiert von Agrippinenser
                  #115

                  Ich habe einige Widgets kopiert, eingefügt und anschließend angepasst. Seitdem wird in allen Dashboards unten links diese ID dargestellt. Irgendetwas ist dabei schief gegangen.

                  cac2b03d-7d7a-4a3a-baa6-7a8fc1d560af-image.jpeg

                  Wie bekomme ich das korrigiert ?

                  Grüße vom Rhein @Colonia Claudia Ara Agrippinensium

                  JoJo58J 1 Antwort Letzte Antwort
                  0
                  • AgrippinenserA Agrippinenser

                    Ich habe einige Widgets kopiert, eingefügt und anschließend angepasst. Seitdem wird in allen Dashboards unten links diese ID dargestellt. Irgendetwas ist dabei schief gegangen.

                    cac2b03d-7d7a-4a3a-baa6-7a8fc1d560af-image.jpeg

                    Wie bekomme ich das korrigiert ?

                    JoJo58J
                    JoJo58J
                    JoJo58
                    schrieb am zuletzt editiert von
                    #116

                    @Agrippinenser

                    Im Backend links auf Einstellungen und dann den Haken bei "ID-Badge auf jedem Gerät anzeigen" rausnehmen.

                    2fcf9586-ff2a-4d38-9368-e9a844756c81-image.jpeg

                    Gruß, Johannes

                    Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                    Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                    Einfach ein tolles Hobby :-)

                    1 Antwort Letzte Antwort
                    1
                    • AgrippinenserA
                      AgrippinenserA
                      Agrippinenser
                      schrieb am zuletzt editiert von
                      #117

                      Danke, das hat geholfen.

                      Grüße vom Rhein @Colonia Claudia Ara Agrippinensium

                      1 Antwort Letzte Antwort
                      0
                      • AgrippinenserA
                        AgrippinenserA
                        Agrippinenser
                        schrieb am zuletzt editiert von
                        #118

                        das ist mein Stand :

                        home.jpg
                        Phone.jpg Energie.jpg Solar.jpg

                        LG

                        Grüße vom Rhein @Colonia Claudia Ara Agrippinensium

                        icebearI 1 Antwort Letzte Antwort
                        2
                        • B beetle-fan

                          Ich nutze seit neustem auch AURA und bin wirklich begeistern vom UI. Klar sind bei Vis2 die Möglichkeiten sicherlich noch viel größer/weiter, mir gefällt aber insb. das optische Ergebnis der AURA Dashboards - das sieht einfach von sich aus (für mich) ansprechender aus.

                          Ich würde gerne ein älteres iPad Air als Dashboard-Gerät nutzen. Wenn ich das Dashboard über die URL aufrufe steht da allerdings immer "nicht verbunden" und es zeigt nichts an? An meinem iPad Pro funktioniert es hingegen, genauso wie am Laptop. Hat jemand eine Idee, woran das liegen kann?

                          B
                          B
                          beetle-fan
                          schrieb am zuletzt editiert von
                          #119

                          Ich zitiere mich mal selbst 😇 :

                          Ich würde gerne ein älteres iPad Air als Dashboard-Gerät nutzen. Wenn ich das Dashboard über die URL aufrufe steht da allerdings immer "nicht verbunden" und es zeigt nichts an? An meinem iPad Pro funktioniert es hingegen, genauso wie am Laptop. Hat jemand eine Idee, woran das liegen kann?

                          Also nochmal: wenn ich dir URL öffne, zeigt das iPad zwar die Aura Oberfläche, aber nicht das Dashboard, Status oben rechts sagt "nicht verbunden". Alle Geräte sind natürlich im gleichen Netzwerk.

                          ioBroker in LXC auf Proxmox (Intel NUC) | CCU3 mit OpenCCU

                          D 1 Antwort Letzte Antwort
                          0
                          • AgrippinenserA Agrippinenser

                            das ist mein Stand :

                            home.jpg
                            Phone.jpg Energie.jpg Solar.jpg

                            LG

                            icebearI
                            icebearI
                            icebear
                            schrieb am zuletzt editiert von
                            #120

                            @Agrippinenser said:

                            das ist mein Stand :

                            Darf ich dich mal fragen welche Adapter bzw. welches Script du nutzt um die Telefone von der FB abzufragen bzw anzuzeigen?

                            AgrippinenserA 2 Antworten Letzte Antwort
                            0
                            • B beetle-fan

                              Ich zitiere mich mal selbst 😇 :

                              Ich würde gerne ein älteres iPad Air als Dashboard-Gerät nutzen. Wenn ich das Dashboard über die URL aufrufe steht da allerdings immer "nicht verbunden" und es zeigt nichts an? An meinem iPad Pro funktioniert es hingegen, genauso wie am Laptop. Hat jemand eine Idee, woran das liegen kann?

                              Also nochmal: wenn ich dir URL öffne, zeigt das iPad zwar die Aura Oberfläche, aber nicht das Dashboard, Status oben rechts sagt "nicht verbunden". Alle Geräte sind natürlich im gleichen Netzwerk.

                              D
                              D
                              dering
                              schrieb am zuletzt editiert von
                              #121

                              @beetle-fan ist Aura per http oder https erreichbar?
                              Wenn https, dann würde ich Mal ohne Zertifikat testen.

                              Wer einen Kaffee spendieren will: https://paypal.me/HermannDering

                              1 Antwort Letzte Antwort
                              0
                              • B
                                B
                                beetle-fan
                                schrieb am zuletzt editiert von
                                #122

                                Zugriff per http.

                                Ich konnte das Problem aber lösen: im Web-Adapter musste ich die Option "Reine Web-Sockets (iobroker.ws) verwenden" deaktivieren. Nun wird das Dashboard angezeigt.

                                Danke trotzdem!

                                ioBroker in LXC auf Proxmox (Intel NUC) | CCU3 mit OpenCCU

                                1 Antwort Letzte Antwort
                                0
                                • icebearI icebear

                                  @Agrippinenser said:

                                  das ist mein Stand :

                                  Darf ich dich mal fragen welche Adapter bzw. welches Script du nutzt um die Telefone von der FB abzufragen bzw anzuzeigen?

                                  AgrippinenserA
                                  AgrippinenserA
                                  Agrippinenser
                                  schrieb am zuletzt editiert von
                                  #123

                                  @icebear sagte:

                                  Darf ich dich mal fragen welche Adapter bzw

                                  gerne:-) also das ist eher ein über viele Jahre immer mal wieder hier und dort angepasstes Bastelwerk - aber es funktioniert. Ich schaue gleich mal drüber um persönlichen Kram rauszunehmen und wenn ich mich dann noch traue poste ich.
                                  Adapter war TR064.

                                  Grüße vom Rhein @Colonia Claudia Ara Agrippinensium

                                  1 Antwort Letzte Antwort
                                  0
                                  • icebearI icebear

                                    @Agrippinenser said:

                                    das ist mein Stand :

                                    Darf ich dich mal fragen welche Adapter bzw. welches Script du nutzt um die Telefone von der FB abzufragen bzw anzuzeigen?

                                    AgrippinenserA
                                    AgrippinenserA
                                    Agrippinenser
                                    schrieb am zuletzt editiert von Agrippinenser
                                    #124

                                    @icebear sagte:

                                    Script du nutzt um die Telefone von der FB abzufragen bzw anzuzeigen?

                                    Wir nutzen ein Telefonbuch mit gesperrten Nummern und zudem 29 Rufnummernbereiche. Mehr als 30 lässt AVM nicht zu. Bei Anruf wird die eingehende Nummer mit den Sperrlisten abgeglichen, abgewiesen und in die Liste der gesperrtem eingetragen.
                                    Alle anderen Anrufer kommen durch und ein hinterlegtes Bild wird zu Anzeige aktualisiert.
                                    Der Status der einzelnen Telefone wird aus den "tr-064.0.callmonitor.toPauseState*" ermittelt.
                                    Bilder liegen in einem NAS-Verzeichnis.

                                    Wie oben gesagt habe ich über die Jahre hinweg daran gebastelt und vieles kann sehr wahrscheinlich verbessert werden. Tipps nehme ich gerne an .
                                    LG

                                    Verwendetes CSS

                                    @keyframes yellow-blink {
                                     0%,50% {filter: drop-shadow(0px 0px 4px #FFDB3B) drop-shadow(0px 0px 4px #FFDB3B) drop-shadow(0px 0px 4px #FFDB3B); }
                                     51% {filter: none;}
                                    }
                                    .gelbblink {  
                                     animation: yellow-blink 2s infinite;
                                    }
                                    @keyframes red-blink {
                                    0%,50% {filter: drop-shadow(0px 0px 4px #f13164) drop-shadow(0px 0px 4px #f13164) drop-shadow(0px 0px 4px #f13164); }
                                     51% {filter: none;}
                                    }
                                    .rotblink {  
                                     animation: red-blink 2s infinite;
                                    }
                                    .red { color:#f44336 !important; }
                                    .deeporange { color:#ff5722 !important; }
                                    .lime { color:#cddc39 !important; }
                                    .lightgreen { color:#8bc34a !important; }
                                    .yellow { color:#ffeb3b !important; }
                                    .white { color:#f8f8f8 !important; }
                                    .grey { color:#9e9e9e !important; }
                                    

                                    Skript Rufbehandlung

                                    
                                    //const moment = require('moment');
                                    const fs = require('fs');
                                    
                                    //let idrufegesperrt = "0_userdata.0.vis.Tabellen.eingehendgesperrt";
                                    let idrufegesperrt = '0_userdata.0.Telefon.gesperrteAnrufe';
                                    let idAnrufe = '0_userdata.0.Telefon.Anrufe';
                                    let jsontab = [];
                                    
                                    // zur Anzeige in VIS
                                    createState(
                                       idrufegesperrt,
                                       JSON.stringify(jsontab),
                                       false,
                                       { type: 'string', name: 'unerwuenschte Anrufe' },
                                       function () {},
                                    );
                                    createState(idAnrufe, JSON.stringify(jsontab), false, { type: 'string', name: 'Anrufe' }, function () {});
                                    
                                    const maxUnerwuenschteAnrufer = 99; // Tabelleneinträge begrenzen
                                    const maxAnrufe = 99; // Tabelleneinträge begrenzen
                                    
                                    const vorwahl = '0xxxxx';
                                    // MSN, Gerätename, Anruf auf Alexa ausgeben
                                    const arrAnschluss = [
                                       { AnschlussNr: '11111', Name: 'Anschluss 0', Ansage: false },
                                       { AnschlussNr: '2222', Name: 'Anschluss 1', Ansage: false },
                                       { AnschlussNr: '33333', Name: 'Anschluss 2', Ansage: false },
                                       { AnschlussNr: '4444', Name: 'Anschluss 3', Ansage: true },
                                       { AnschlussNr: '5555', Name: 'Anschluss 4, Ansage: false },
                                       { AnschlussNr: '6666', Name: 'Anschluss 5', Ansage: false },
                                       { AnschlussNr: '7777', Name: 'Anschluss 6', Ansage: false },
                                       { AnschlussNr: '8888', Name: 'Anschluss 7', Ansage: true },
                                       { AnschlussNr: '9999', Name: 'Anschluss 8', Ansage: true },
                                       { AnschlussNr: '00000', Name: 'Anschluss 9', Ansage: true }
                                    ];
                                    
                                    var push = true; // Ausgabe Pushover
                                    var clog = true; // Ausgabe ins Logfile
                                    
                                    var AnruferName = ''; // Name des Anrufern
                                    var AnruferNummer = ''; // Nummer des Anrufern
                                    var AnschlussName = ''; // Bezeichnug des Hausanschlusses
                                    var AnschlussNummer = ''; // Nummer des Hausanschlusses
                                    
                                    
                                    on({ id: 'tr-064.0.callmonitor.inbound.json' /*json*/, change: 'any' }, function (obj) {
                                    
                                       var jObj = JSON.parse(obj.state.val);
                                    
                                       AnruferNummer = jObj.caller; // Nummer des Anrufers
                                       AnruferName = jObj.callerName; //Name des Anrufers
                                       AnschlussNummer = jObj.callee.replace(vorwahl, ''); //eigene Nummer ohne Vorwahl
                                       AnschlussName = AName(AnschlussNummer); //Bezeichnung des Telefonanschlusses
                                    
                                       //Anrufer nicht im Telefonbuch, dann Ansage der eingehenden Nummer
                                       if (AnruferNummer.length > 0 && AnruferName.length == 0) {
                                           AnruferName = AnruferNummer;
                                       } else {
                                           // Anfufer sendet keine Nummer
                                           if (AnruferNummer.length == 0) {
                                               AnruferName = 'verdeckter Anrufer';
                                           }
                                       }
                                    
                                       // wenn Anrufer gesperrt dann Spaemmer in Tabelle speichern und ggf. Pushnachricht
                                       if (istRufnummernbereichgesperrt(AnruferNummer) || istSperrTelefonbuch(AnruferName)) {
                                           const jsonObj = JSON.parse(getState(idrufegesperrt).val);
                                           const jsontrimmed = jsonObj.slice(-maxUnerwuenschteAnrufer);
                                    
                                           jsontrimmed.push({
                                               id: Date.now(),
                                               _type: jObj._type,
                                               timestamp: jObj.timestamp,
                                               caller: jObj.caller,
                                               callee: jObj.callee,
                                               calleeName: jObj.calleeName,
                                           });
                                    
                                           jsontrimmed.sort((a, b) => b.id - a.id);
                                           setState(idrufegesperrt, JSON.stringify(jsontrimmed));
                                    
                                           if (push) {
                                               var nachricht =
                                                   'von: <font color="#ff4d00">' +
                                                   AnruferName +
                                                   '</font>\n' +
                                                   'Nr.: <font color="#ff4d00">' +
                                                   AnruferNummer +
                                                   '</font>\n' +
                                                   'auf: <font color="#ff4d00">' +
                                                   AnschlussName +
                                                   '</font>';
                                               fPush(nachricht, 'Anruf', 'intermission');
                                           }
                                    
                                           //Bild von Synology/Kontakte auf gemountetes Verzeichnis legen
                                           BildVisualisieren('spammer');
                                    
                                           return;
                                       }
                                       
                                       if (push) {
                                           var nachricht =
                                               'von: <font color="#00CD00">' +
                                               AnruferName +
                                               '</font>\n' +
                                               'Nr.: <font color="#00CD00">' +
                                               AnruferNummer +
                                               '</font>\n' +
                                               'auf: <font color="#00CD00">' +
                                               AnschlussName +
                                               '</font>';
                                           fPush(nachricht, 'Anruf', 'intermission');
                                       }
                                    
                                       //Bild von Synology/Kontakte auf gemountetes Verzeichnis legen
                                       BildVisualisieren(AnruferNummer);
                                    });
                                    
                                    //----------------------------------------------------------------------------------------------------------------
                                    // Tabelle Anrufe aktualisieren
                                    // ---------------------------------------------------------------------------------------
                                    on({ id: 'tr-064.0.calllists.all.json', change: 'any' }, function (calllistsobj) {
                                    
                                       // Neue Anrufdaten einlesen
                                       const call = JSON.parse(calllistsobj.state.val)[0];
                                    
                                       // Bestehende Anrufliste einlesen
                                       const anrufe = JSON.parse(getState(idAnrufe).val || '[]');
                                    
                                       // Richtung / Modus bestimmen
                                       let modus = '';
                                       
                                       if (call.path.length > 0) {
                                           modus = '<span class=\"deeporange\">#AB</span>';
                                       } else if (call.device === 'Anrufbeantworter') {
                                           modus = '<span class=\"grey\">-AB</span>';
                                       } else if (call.sym === '>') {
                                           modus = '<span class=\"yellow\">-IN</span>';
                                       } else if (call.sym === '<') {
                                           modus = '<span class=\"lightgreen\">OUT</span>';
                                       } else if (call.sym === 'x') {
                                           modus = '<span class=\"grey\">-X-</span>';
                                       }
                                       
                                       // Name bestimmen, fall nicht vorhanden Nummer eintragen
                                       const name = call.name && call.name.length > 0
                                           ? call.name
                                           : call.called;
                                    
                                       // Neuen Anruf hinzufügen
                                       anrufe.push({
                                           id: Date.now(),
                                           Richtung: modus,
                                           Zeit: call.date,
                                           Name: name,
                                           Dauer: call.duration
                                       });
                                    
                                       // Neueste Anrufe zuerst und auf maxAnrufe begrenzen
                                       anrufe.sort((a, b) => b.id - a.id);
                                       const anrufeBegrenzt = anrufe.slice(0, maxAnrufe);
                                    
                                       // Speichern
                                       setState(idAnrufe, JSON.stringify(anrufeBegrenzt));
                                    
                                       //Bild des Anrufers durch Platzhalter ersetzten
                                       BildVisualisieren('frei');
                                    
                                    });
                                    
                                    // Funktionen ---------------------------------------------------------------------------------------
                                    
                                    /**
                                    * @param {string} eingehend Nummer
                                    */
                                    function BildVisualisieren(eingehend) {
                                       const SynoPath = '/mnt/synology/kontakte/';
                                       const CheckSynology = SynoPath + '0000000000.jpg';
                                       const SynoDown = '/home/iobroker/Synology_offline.jpg';
                                    
                                       var anrufer = eingehend;
                                    
                                       if (fs.existsSync(CheckSynology)) { 
                                           if (clog) {
                                               console.log('150-Synology gemountet');
                                           }
                                    
                                           // Anrufer sendet keine Nummer
                                           if (anrufer.length == 0) {
                                               const bild = fs.readFileSync(SynoPath + 'unterdrueckt.jpg');
                                               writeFile('vis-2.0', '/RHv2/images/anrufer.jpg', bild, function (error) {});
                                               if (clog) {
                                                   console.log('156-unterdrueckt');
                                               }
                                           }
                                    
                                           // unbekannter Anrufer
                                           else if (!fs.existsSync(SynoPath + anrufer + '.jpg')) {
                                               const bild = fs.readFileSync(SynoPath + 'unbekannt.jpg');
                                               writeFile('vis-2.0', '/RHv2/images/anrufer.jpg', bild, function (error) {
                                                   console.log(error);
                                               });
                                               if (clog) {
                                                   console.log('165-unbekannt.jpg kopiert');
                                               }
                                           }
                                    
                                           // Anrufer bekannt
                                           else {
                                               const bild = fs.readFileSync(SynoPath + anrufer + '.jpg');
                                               writeFile('vis-2.0', '/RHv2/images/anrufer.jpg', bild, function (error) {});
                                               if (clog) {
                                                   console.log('172-' + anrufer + '.jpg kopiert');
                                               }
                                           }
                                       } else {
                                           if (clog) {
                                               console.log('175-Synology nicht gemountet');
                                           }
                                           var datei = fs.readFileSync(SynoDown);
                                           writeFile('vis-2.0', '/RHv2/images/anrufer.jpg', datei, function (error) {});
                                       }
                                    }
                                    
                                    /**
                                    * @param {string} eingehend
                                    */
                                    function AName(eingehend) {
                                       for (var i = 0; i < arrAnschluss.length; i++) {
                                           if (arrAnschluss[i].AnschlussNr === eingehend) {
                                               return arrAnschluss[i].Name;
                                           }
                                       }
                                    }
                                    
                                    function istAnschlussansagen(eingehend) {
                                       for (var i = 0; i < arrAnschluss.length; i++) {
                                           if (arrAnschluss[i].AnschlussNr === eingehend) {
                                               return arrAnschluss[i].Ansage;
                                           }
                                       }
                                    }
                                    
                                    /*
                                    * Prüft über ioBroker-Selektoren, ob die Nummer in einer Rufumleitung/Sperre liegt
                                    * @param {string} eingehend - Anrufernummer
                                    * @returns {boolean} True falls gesperrt
                                    */
                                    function istRufnummernbereichgesperrt(eingehend) {
                                       let treffer = false;
                                       // Durchläuft alle FritzBox-Rufumleitungen/Sperren effizient
                                       $('tr-064.0.callForwarding.*').each((id) => {
                                           const obj = getObject(id);
                                           if (!obj || !obj.common || !obj.common.name) return;
                                    
                                           const parts = obj.common.name.split(' ');
                                           // Erwartetes Format: "fromNumber [NUMMER] -> ..."
                                           if (parts[0] === 'fromNumber' && parts[2] === '->') {
                                               const sperrNummer = parts[1];
                                               if (eingehend.startsWith(sperrNummer)) {
                                                   if (clog) {console.log(`Nummer unerwünscht: ${eingehend} - FritzBox-Filter: ${sperrNummer}`);}
                                                   treffer = true;
                                               }
                                           }
                                       });
                                       
                                       return treffer;
                                    }
                                    
                                    /*
                                    * Prüft ob die Nummer im Sperr-Telefonbuch vorhanden ist
                                    * @param {string} eingehend - Anrufernummer
                                    * @returns {boolean} True falls gesperrt
                                    */
                                    function istSperrTelefonbuch(eingehend) {
                                       var treffer = false;
                                       if (eingehend.startsWith('*')) {
                                           if (clog) {
                                               console.log('226-gesperrter Anrufer: ' + eingehend);
                                           }
                                           treffer = true;
                                       }
                                       return treffer;
                                    }
                                    
                                    /**
                                    * @param {string} Nachricht
                                    * @param {string} Titel
                                    * @param {string} Sound
                                    */
                                    function fPush(message, titel, sound) {
                                       if (clog) {
                                           console.log('250-Pushover:=' + titel);
                                       }
                                       sendTo('pushover.0', {
                                           message: message,
                                           title: titel,
                                           sound: sound,
                                           priority: 0,
                                           file: '',
                                           html: 1,
                                       });
                                    }
                                    
                                    

                                    Status Telefone

                                    
                                    const Phones = "0_userdata.0.Telefon.phones";
                                    
                                    // Vorgegebene Texte für die jeweiligen IDs
                                    const PHONE_MAPPING = {
                                       "toPauseState-10": "Phone1",
                                       "toPauseState-11": "Phone2",
                                       "toPauseState-12": "Phone3",
                                       "toPauseState-13": "Phone4",
                                       "toPauseState-14": "Phone5"
                                    };
                                    
                                    // Kombiniertes Mapping für Text und CSS-Klasse je nach Status
                                    const STATUS_CONFIG = {
                                       "ring":    { text: "klingelt",  css: "gelbblink" },
                                       "connect": { text: "verbunden", css: "red" },
                                       "end":     { text: "frei",      css: "lightgreen" }
                                    };
                                    
                                    // Generiert das ID-Array automatisch aus den Keys von PHONE_MAPPING
                                    const triggerIds = Object.keys(PHONE_MAPPING).map(key => `tr-064.0.callmonitor.${key}`);
                                    on({ id: triggerIds, change: 'any' }, function() {
                                    
                                       const anrufe = [];
                                    
                                       for (const [key, textName] of Object.entries(PHONE_MAPPING)) {
                                           const stateId = `tr-064.0.callmonitor.${key}`;
                                           const currentStatus = getState(stateId).val; // Liefert "ring", "connect" oder "end"
                                    
                                           // Holt die Konfiguration für den aktuellen Status (Fallback auf leere Standardwerte)
                                           const config = STATUS_CONFIG[currentStatus] || { text: "", css: "" };
                                    
                                           // HTML dynamisch mit der passenden CSS-Klasse zusammenbauen
                                           const statusHtml = config.css 
                                               ? `<span class="${config.css}">${config.text}</span>` 
                                               : `<span>${config.text}</span>`;
                                    
                                           anrufe.push({
                                               phone: textName,
                                               Status: statusHtml
                                           });
                                       }
                                    
                                       setState(Phones, JSON.stringify(anrufe));
                                    });
                                    
                                    
                                    

                                    Grüße vom Rhein @Colonia Claudia Ara Agrippinensium

                                    1 Antwort Letzte Antwort
                                    0
                                    • D
                                      D
                                      darkiop
                                      Most Active
                                      schrieb am zuletzt editiert von
                                      #125

                                      @dering Zuerst vielen Dank für deine Arbeit. Ein tolles Projekt!
                                      Aufgrund kaum vorhandener Zeit ist das Thema und VIS in der letzten Zeit total heruntergefallen, wir haben uns einfach mit IOB Mobile eine funktionale Plattform zusammen geklickt. Mit deinen Projekt hat auch das Tablet wieder eine Chance ;)

                                      Ich taste mich gerade langsam ran, hier ein paar Dinge die mir aufgefallen sind (v0.56.3):

                                      • MacOS -> Evtl. CMD anstelle von STRG
                                      • Wird das Custom CSS nicht für HTML Widgets gelesen?
                                      • Mit welchem Widget Zeige ich common.states am besten an? Beispiel unten.
                                      • Breite von Widget "Abschnittstitel" nicht einstellbar?
                                      • Widget-Typ: "Wert-Anzeige" ist nicht Widget Auswahl unter "Neues Widget"
                                          "states": {
                                            "303": "Aus",
                                            "2291": "Batterie Standby",
                                            "2292": "Batterie laden",
                                            "2293": "Batterie entladen",
                                            "3664": "Notladebetrieb",
                                            "16777213": "Information liegt nicht vor"
                                          },
                                      

                                      ioBroker Object Explorer: https://forum.iobroker.net/topic/84117/iobroker-object-explorer-dashboard-zum-verwalten-von-dps?_=1789113045261 | Proxmox-ioBroker-Redis-HA Doku: https://forum.iobroker.net/topic/47478/dokumentation-einer-proxmox-iobroker-redis-ha-umgebung

                                      D 1 Antwort Letzte Antwort
                                      0
                                      • L
                                        L
                                        lesiflo
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #126

                                        @darkiop

                                        Mit welchem Widget Zeige ich common.states am besten an? -> Mit dem Widget "Auswahlfeld" und "Dropdown ausblenden" aktivieren.

                                        image.jpeg

                                        1 Antwort Letzte Antwort
                                        0
                                        • D darkiop

                                          @dering Zuerst vielen Dank für deine Arbeit. Ein tolles Projekt!
                                          Aufgrund kaum vorhandener Zeit ist das Thema und VIS in der letzten Zeit total heruntergefallen, wir haben uns einfach mit IOB Mobile eine funktionale Plattform zusammen geklickt. Mit deinen Projekt hat auch das Tablet wieder eine Chance ;)

                                          Ich taste mich gerade langsam ran, hier ein paar Dinge die mir aufgefallen sind (v0.56.3):

                                          • MacOS -> Evtl. CMD anstelle von STRG
                                          • Wird das Custom CSS nicht für HTML Widgets gelesen?
                                          • Mit welchem Widget Zeige ich common.states am besten an? Beispiel unten.
                                          • Breite von Widget "Abschnittstitel" nicht einstellbar?
                                          • Widget-Typ: "Wert-Anzeige" ist nicht Widget Auswahl unter "Neues Widget"
                                              "states": {
                                                "303": "Aus",
                                                "2291": "Batterie Standby",
                                                "2292": "Batterie laden",
                                                "2293": "Batterie entladen",
                                                "3664": "Notladebetrieb",
                                                "16777213": "Information liegt nicht vor"
                                              },
                                          
                                          D
                                          D
                                          dering
                                          schrieb am zuletzt editiert von
                                          #127

                                          @darkiop Erstelle gerne für Bugs oder Features am besten jeweils ein eigenes issue in github. Dann ist es für mich einfacher die Sachen umzusetzen.
                                          Fragen passen hier rein :).

                                          Wird das Custom CSS nicht für HTML Widgets gelesen?

                                          Dem HTML Widget kannst du ein separates CSS geben. Ich denke aber, wenn du die richtigen tags nutzt, sollte das CSS aus dem Backend auch dort angewandt werden.

                                          Breite von Widget "Abschnittstitel" nicht einstellbar?

                                          Über den kleinen Pfeil rechts unten kannst du alle Widgets in der Größe verändern:
                                          image.jpeg

                                          Widget-Typ: "Wert-Anzeige" ist nicht Widget Auswahl unter "Neues Widget"

                                          Wert-Anzeige versteckt sich hinter Messwerte. Da hast du aber recht, das ist nicht ganz synchron. Sollte ich mal angleichen.

                                          Wer einen Kaffee spendieren will: https://paypal.me/HermannDering

                                          D 2 Antworten Letzte Antwort
                                          1

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          453

                                          Online

                                          33.1k

                                          Benutzer

                                          84.2k

                                          Themen

                                          1.4m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2026
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe