Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Marty56

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    M
    • Profile
    • Following 1
    • Followers 0
    • Topics 222
    • Posts 1285
    • Best 64
    • Groups 3

    Marty56

    @Marty56

    67
    Reputation
    402
    Profile views
    1285
    Posts
    0
    Followers
    1
    Following
    Joined Last Online
    Location München

    Marty56 Follow
    Pro Starter Most Active

    Best posts made by Marty56

    • RE: Tr-64 erkennen, ob ein Aufruf auf AB gesprochen wurde

      Ich habe ohne Dokumentation aus Beobachtung der tr-64 versucht, eine Anruferkennung zu programmieren.

      Ob es in allen Cornercases funktioniert, weiß ich nicht, aber in den ersten Tests hat es funktioniert.

      Hier der Code. Feedback erwünscht.

      createState("Anrufzaehler",0);               // zählt die Anrufe pro Tag
      createState("Anrufampel",false);             // setzt Signal wenn Anruf 
      createState("Anrufernamen",'');              // mit Kommata getrennte Anrufliste
      createState("Anrufe_Anrufbeantworter",0);    // zählt die Nachrichten auf AB 
      createState("Anrufbeantworterampel",false);  // setzt Signal wenn Nachr. auf AB
      createState('Anrufbeantworternamen','');     // mit Kommata getrennte AB- Anrufl.
      
      //---------------------- Anrufstatistik jede Nacht zurücksetzen ----------------
      
      schedule("0 0 * * *", function(obj){
          setState("Anrufzaehler",0);
          setState("Anrufampel",false);
          setState("Anrufernamen",'');
          setState("Anrufe_Anrufbeantworter",0);
          setState("Anrufbeantworterampel",false);
          setState('Anrufbeantworternamen','');
      });
      
      //------------------------- Anrufername oder Telefonnummer ermitteln -----------
      /*
      Steht der Anrufer in Adressbuch wird Vorname und Name ausgegeben, sonst die 
      Telefonnummer
      
      */
      function telefonname () {
         	var tokens     =  getState("tr-064.0.callmonitor.inbound.callerName").val.split(",");
      	var answer     = '';
      	var vorname    =  tokens[1];
      	var famname    =  tokens[0];
      
      	if (famname === undefined) famname = '';
      	if (vorname === undefined) vorname = '';
      	if (vorname !== '' || famname !== '')
      	    answer =  vorname + ' ' + famname;
      	else
      	    answer = getState("tr-064.0.callmonitor.inbound.caller").val;
      	return answer; 
      }
      
      /*
      ---------------------------- Anrufer ansagen ----------------------------------
      Der Name des Anrufenden wird beim Klingeln auf allen Lautsprechern ausgegeben
      und die Anrufstatistik mitgeführt
      
      */
      on({id:"tr-064.0.callmonitor.ringing", change: 'gt'}, function(obj) {
          setTimeout( function() {
              if (getState("tr-064.0.callmonitor.ringing").val === true) {
                  setState("Anrufzaehler",getState("Anrufzaehler").val + 1);
                  var name = telefonname();
                  setState("Anrufernamen",getState("Anrufernamen").val + ((getState("Anrufampel").val === true) ? ", " : "") + name);
                  setState("Anrufampel",true);
      
                  // Sprachausgabe
              	setState("speechout2",JSON.stringify(
                  {   text:   "Anruf von " + name + "!",
                      vol:50,
                      device: 'ALL',
                      night:  false
                  }));
              }
          }, 3000);
      });
      
      /*
      ---------------------------- Anruf beendet -------------------------------------
      Es werden die Anzahl der Anrufe auf Anrufbeantworter und eine Liste von 
      Namen mitgeführt, die Nachrichten hinterlassen haben.
      Es werden dazu 'callmonitor.lastCall.type' und 
      'tr-064.0.callmonitor.lastCall.extension' ausgewertet.
      
      Mangels Dok wurde durch Ausprobieren ermittelt, dass
      
      - type === missed                        : es wurde aufgelegt und nicht gesprochen.
      - type === disconnect && extension !== 40: Gespräch wurde geführt und dann aufgelegt
      - type === disconnect && extension === 40: Nachricht auf AB
      
      bedeuten könnte.
      */
      
      on({id:"tr-064.0.callmonitor.toPauseState", change: 'ne'}, function(obj) {
          setTimeout( function() {
          if (getState('tr-064.0.callmonitor.toPauseState').val === 'end') {
              var name = telefonname();
              if (getState("tr-064.0.callmonitor.lastCall.type").val === 'missed') {
                  log(name + " hat aufgelegt und keine Nachricht hinterlassen");}
              if (getState("tr-064.0.callmonitor.lastCall.type").val === 'disconnect') {
                  if (getState('tr-064.0.callmonitor.lastCall.extension').val == 40) {
                      setState("Anrufe_Anrufbeantworter",getState("Anrufe_Anrufbeantworter").val + 1);
                      log("Nachricht auf Anrufbeantworter von "+ name + " mit einer Länge von " + getState("tr-064.0.callmonitor.lastCall.duration").val + " sec");
                      setState("Anrufbeantworternamen",getState("Anrufbeantworternamen").val + ((getState("Anrufbeantworterampel").val === true) ? ", " : "") + name);
                      setState("Anrufbeantworterampel",true);
                  } else {
                     log("Der Anruf von " + telefonname() + " hat " + getState("tr-064.0.callmonitor.lastCall.duration").val + " sec gedauert");
                  }    
              }
          }    
          }, 3000);
      });
      

      Was jetzt noch schön wäre, wenn ich mit einem Alexa Dialog die hinterlassenen Nachrichten auf Alexa abhören könnte.

      Keine Ahnung, ob das möglich ist, wenn das schon einer gemacht hat, dann wäre ich daran interessiert.

      posted in ioBroker Allgemein
      M
      Marty56
    • Source Code von Script aus backup.json extrahieren

      Manchmal möchte man nur ein bestimmtes Script aus einem Backup wiederherstellen. Dazu habe ich ein kleines Hilfsscript geschrieben, das den Vorgang etwas erleichtert.

      /*
      Script zum Extrahieren von Scripts aus dem backup.json file
      1. Verzeichnis /opt/iobroker/restore/ erstellen
      2. backup.json file aus Backup extrahieren und in obiges Verzeichnis kopieren
      3. Im Script unten den gewünschten Namen des Scripts eintragen
      3. Script starten
      4. das extrahierte Script wird mit dem Namen "the_script.js" erzeugt
      */
      
      // Hier das Verzeichnis und den Namen des Scripts eintragen. 
      // Im Beispiel das Script 'Jalousien', das unter 'common' abgelegt wurde
      
      const name_of_script = "common.Jalousien";
      
      var fs = require('fs');
      var filename = '/opt/iobroker/restore/backup.json';
      fs.readFile(filename, 'utf8', function(err, data) {
        if (!err) {
          var objects = JSON.parse(data).objects;
          var index = objects.findIndex(x => x.id ==="script.js." + name_of_script);
          var source = objects[index];
          var script_text = unescape(source.value.common.source);
          fs.writeFile("/opt/iobroker/restore/the_script.js", script_text, function(err) {
          if(err) {
              return console.log(err);
          }
          log("Script was extracted");
          });
        } else log("backup.json konnte nicht gelesen werden");
      });
      
      posted in JavaScript
      M
      Marty56
    • RE: Goodbye 2022 ... ein "kleiner" ioBroker Jahresrückblick

      @apollon77

      Ein großes Dankeschön an alle Entwickler und Dich für die großartige Arbeit!!

      posted in ioBroker Allgemein
      M
      Marty56
    • RE: js-controller 5.0.x jetzt in der BETA

      @sandy die Log Stufe des Adapters auf "Error" stellen.

      posted in ioBroker Allgemein
      M
      Marty56
    • RE: Alexa und SSML Audio Files

      @SoerenKaiser99
      Vermutlich ein blöde Frage, aber wofür ist dieses lange xml File.
      Hat das was mit Blocky zu tun. Ich habe Blocky noch nie benutzt.

      Update: Hat sich erledigt

      posted in Skripten / Logik
      M
      Marty56
    • Websites parsen und bedienen mit puppetteer

      Ich hatte das Problem, dass ich per ioBroker Script eine Website bedienen und Werte auslesen wollte. Die Seite benutzt Javascript und einfaches Parsen von statischem HTML Code ist nicht möglich.
      Konkret geht es um ein Capture Portal, das ich mit iobroker automatisiert bedienen möchte, also Login und Passwort eintragen möchte. Dabei bin auf die Node Library puppetteer von Google gestoßen.

      https://github.com/GoogleChrome/puppeteer

      Puppetteer ermöglicht es sehr einfach via node.js script, Websites aufzurufen, zu bedienen und vieles mehr.
      Die Installation funktioniert sogar auf headless Systemen, wie z.B. dem Raspberry Pi, ohne Desktop Oberflächen.
      Voraussetzung ist node Node v7.6.0 und höher.

      Man trägt im Javascript Adapter das module 'puppeteer' ein und restartet den Adapter.
      Dann muss man auf dem Raspberry noch Chromium headless installieren.
      Wie das geht ist unter
      https://code-flow-hjbello.blogspot.com/2018/11/make-puppeteer-work-with-raspbian-vers.html
      beschrieben.

      Dann kann man Puppetteer in ioBroker Scripten benutzen.

      Als Test habe ich ein einfaches Script in ioBroker erzeugt, dass ein Login bei GitHub macht und ein Screencapture nach dem Login erzeugt.

      // Github Login mit puppeteer
      const puppeteer = require('puppeteer')
      const screenshot = 'github.png';
      const GITHUB_USER='Marty56';
      const GITHUB_PWD='xxxxxxxxxxx';
      (async () => {
        const browser = await puppeteer.launch({args:['--no-sandbox'],executablePath: '/usr/bin/chromium-browser'})
        const page = await browser.newPage()
        await page.goto('https://github.com/login')
        await page.type('#login_field', GITHUB_USER)
        await page.type('#password', GITHUB_PWD)
        await page.click('[name="commit"]')
        await page.waitForNavigation()
        await page.screenshot({ path: screenshot })
        browser.close()
        console.log('See screenshot: ' + screenshot)
      })()
      

      Mehr Beispiele gibt es unter
      https://github.com/checkly/puppeteer-examples

      Zum Debuggen empfiehlt sich VSCode auf einem Desktop PC, weil man da auch das Browser Fenster, das bedient wird, sehen kann und außerdem Single Step unterstützt wird.

      Vielleicht habe Ihr noch tolle Ideenen, was man mit Puppetteer und iobroker alles machen kann.

      posted in JavaScript
      M
      Marty56
    • RE: iobroker VIS mit VPN

      @saftladen18 Am einfachsten geht es mit Tailscale.

      posted in Einsteigerfragen
      M
      Marty56
    • RE: Völlig subjektiver Vergleich FHEM - IOBroker - OpenHab etc. ;-)

      Ich bin von openhab vor ca. 1 Jahr auf ioBroker umstiegen, das waren meine Gründe:

      1. Nach mehr als 3 Jahren Nutzung von openHAB ist die proprietäre openHAB DSL (design specific language) in Kombinationen mit den schlecht dokumentieren Java Klassen noch immer eine gewaltige Behinderung für mich.

      2. Die Entwicklungsumgebung von ioBroker ist wesentlich besser, einfacher und schneller zu bedienen.

      Der openHAB Designer hat insbesondere unter Windows grobe Fehler und ist ständig abgestürzt. Außerdem werden Passagen als Fehler markiert, die korrekt sind.

      (Die neue Entwicklungsumgebung von openHAB unter Visual Studio habe ich nicht mehr getestet.)

      3. Durch die direkte Verwendung von Javascript ohne Zwischenübersetzung können bei ioBroker Änderungen unmittelbar getestet werden und nicht wie bei openHAB nach ca. 2 Minuten (in meinem Setup).

      Die Aufteilung in kleinere Rule Files hat bei mir in openHAB (auch in openHAB 2.0) leider nie funktioniert, weil immer wieder Rules nicht geladen wurden.

      Auch das Laden der verschiedenen Bindings und Module beim Neustart ist bei openHAB nicht reproduzierbar und wohl von Zufälligkeiten abhängig.

      Das führt dazu, dass ich bei Neustart immer wieder unterschiedliche Fehlermeldung bekommen habe.

      4. Die für mich relevanten Bindings sind in ioBroker vorhanden und die Inbetriebnahme ist einfacher als bei openHAB.

      Dennoch hat openHAB auch aufgrund des internationalen Ansatz den Vorteil mehr Bindings zu unterstützen als ioBroker.

      5. Die Cloud Komponente von ioBroker ist flexibler und kann beliebige JSON Formate verarbeiten. In meinem Fall konnte ich Presence Detection mit Geofency (App auf iPhone) dadurch direkt realisieren. Bei openHAB geht das nur mit einem separaten MQTT Server, den man umständlich selber einrichten und warten muss. Das ist für mich durch die damit verbundenen Port Öffnungen ein nicht akzeptables Sicherheitsrisiko.

      6. Ein MQTT Server ist ein ioBroker Adapter. Damit sind alle IoTs, die MQTT benutzen, direkt unterstützt.

      7. Die Visualisierung von ioBroker ist wesentlich flexibler und mächtiger. Insbesondere die Diagrammfunktionen sind viel besser und flexibler.

      8. Die Fehlermeldungen in der openHAB Konsole sind für Java Programmierer gemacht und für mich völlig unbrauchbar. Ich hatte immer Schwierigkeiten, Fehler in meinem DSL Code zu lokalisieren. Das war in Verbindung mit den langsamen Testzyklen (s.o). ein Entwicklungsproduktivitätskiller.

      9. Die Performance von ioBroker ist wesentlich besser als openHAB mit DSL.

      10. Stabilität von ioBroker ist vergleichbar mit openHAB.

      Der einzige Nachteil von ioBroker gegenüber von openHAB ist der höherer Resourcenbedarf (RAM).

      posted in ioBroker Allgemein
      M
      Marty56
    • RE: Skripte beginnen doppelt zu laufen

      Hast Du vielleicht den js2f Adapter installiert. Der hat bei mir auch schon mal so etwas bewirkt.

      posted in Skripten / Logik
      M
      Marty56
    • RE: [Vorlage] Hilfreiche JavaScript-Funktionen

      Große Klasse. Danke dafür. Sofort einen Bookmark gemacht!!

      posted in JavaScript
      M
      Marty56

    Latest posts made by Marty56

    • RE: TibberLink Adapter

      Bei mir geht nicht mehr ab heute morgen.
      Es scheint ein Server Problem zu sein. In Home Assistant funktioniert es auch nicht mehr.

      posted in ioBroker Allgemein
      M
      Marty56
    • RE: [SourceAnalytix 0.4.8-Final] Released !

      @wusa Vielleicht spukt dir auch dieses Feature mit der automatischen Zählerwechselerkennung in die Suppe.
      Ich habe das überall ausgeschaltet.

      posted in Tester
      M
      Marty56
    • RE: Wann soll man VIS1 oder Vis2 oder webui verwenden ?

      Mit VIS bzw. VIS2 würde ich nur anfangen, wenn man wirklich die Notwendigkeit sieht, Details der Darstellung individuell anzupassen.
      VIS ist komplex und benötigt eine ziemlich umfangreiche Einarbeitung.
      VIS2 hat derzeit noch einige Bugs, die bei mir so gravierend waren, dass ich aufhören musste. Aber das ist sehr individuell. Bei anderen funktioniert VIS2 schon ganz gut.

      Ich benutze iQontrol. Dieser Editor war für mich deutlich einfach zu bedienen.

      posted in Visualisierung
      M
      Marty56
    • RE: simple-api vs. rest-api - Umstieg?

      Die Rest-API scheint aber auch nicht mehr gepflegt zu sein.
      Ich habe aufgrund dieses Post die Rest-API installier und bekomme einige Warnings, dass veraltete Package in dem Adapter verwendet werden.

      posted in ioBroker Allgemein
      M
      Marty56
    • RE: [SourceAnalytix 0.4.8-Final] Released !

      @michael-sauer
      #Das ist ein Fehler. Schreibe einfach ein Script, das den Zähler Mitternacht mit seinem eigenen Wert schreibt.
      Es scheint, dass der Adapter auf change "any" die Werte neu berechnet.

      posted in Tester
      M
      Marty56
    • iqcontrol Tabellen

      Hallo,

      Ich versuche iqcontrol zu benutzen und am Anfang hatte ich auch guten Erfolg damit.
      Jetzt nachdem ich meine VIS umgestellt habe, entwickelt das Tool aber ein Eigenleben, das ich nicht mehr unter Kontrolle bekomme.

      Ein Verhalten, das ich nicht in Griff bekomme, ist das automatische Ausblenden von Tabellenspalten. Das passiert manchmal, aber auch nicht immer. Wenn ich dann manuell die Spalten einblende, wird das beim nächsten Reload wieder vergessen.

      Hat da jemand einen Tip?

      posted in Einsteigerfragen
      M
      Marty56
    • RE: VIS-2 Mein erster Eindruck

      Ich habe heute auch den VIS 2 Adapter installiert, weil er ja jetzt im stable Repro ist.

      Bei mir funktioniert der Adapter ziemlich eingeschränkt und ich würde ihn noch nicht "stable" bezeichnen.
      Aber vielleicht liegt es aber auch an meinem Setup. Ich verwendet Safari und den Brave Browser (Chrome Rendering Engine). Ansonsten habe ich ioBroker in dem Buanet Docker (latest) laufen und das Stable Repro für die Adapter eingebunden.

      Was mir auffällt

      1. Ich habe eine Seite, bei der VIS2 abstürzt. Ich muss diese Seite ausblenden, damit ich den Editor überhaupt nutzen kann. Was die Ursache ist, ist mir derzeit nicht klar.
      2. Die Lasso Funktion, mit der ich mehrere Widgets selektieren kann, funktioniert nicht mehr.
      3. Es gibt Editor Zustände, bei denen der Editor es nicht mehr erlaubt, mehrere Widgets zu selektieren.
      4. Ich habe ein Widget von einer Seite in eine andere Seite kopiert. Auf der neuen Seite ließ es sich dann nicht mehr mit der Mouse verschieben. Die einzige Möglichkeit war, es mit neuen Koordinaten neu zu platzieren, danach ging das Verschieben wieder.
      5. Das Verschieben und Vergrößern von Widgets funktioniert ab und zu nicht. Dann muss ich den Editor durch Seite reload neu starten.
      6. Ich habe auch mit diesem responsive Design herumgespielt. Das hat sehr seltsam funktioniert, bis ich aufgegeben habe. Ich kann nicht ausschließen, dass die Ursache meine Unerfahrenheit mit dem Tool ist.
        Ich verwende relativ viele Grafana Diagramme und die habe ich bisher nicht vernünftig darstellen können.
        Alle gruppierte Widget, die ich viel benutze, scheinen nicht kompatibel zu sein. Das wäre ein ziemlicher Überarbeitungsaufwand.
      7. Gibt es bei diesem responsive Design eigentlich eine Art "New Line" oder die Möglichkeit zwei Spalten für ein Widget zu reservieren.
      8. Diese neue Navigationsleiste habe ich benutzt und auch relativ schnell zum Laufen gebracht. Das ist wirklich eine gutes Feature.

      Aber alles im allem schön, dass VIS weiterentwickelt wird.

      Update: Seit dem ich den VIS 2 installiert habe, hatte ich auch zweimal diesen alten Alias Fehler, der sich in den älteren Versionen von JS-Controller so hartnäckig gehalten hatte. Dieser Fehler war seit ca. 2 -3 Monaten nicht mehr aufgetaucht.

      posted in Visualisierung
      M
      Marty56
    • RE: [SourceAnalytix 0.4.8-Final] Released !

      @crunchip Danke für das Feedback. Das sind ja gute Nachrichten.
      Machst Du das selber, oder noch Dutchman?

      posted in Tester
      M
      Marty56
    • RE: [SourceAnalytix 0.4.8-Final] Released !

      Hallo,

      Ein allgemeine Frage. DutchmanNL scheint ja nicht mehr an dem Adapter zu arbeiten.
      Wird der Adapter noch weiterentwickelt bzw. Fehler behoben?

      posted in Tester
      M
      Marty56
    • hmrpc Unreach Datenpunkt fehlerhaft.

      Hallo,

      Ich benutzte den Docker von ioBroker in der latest Version und habe den CCU Adapter aus dem stable Repro installiert, der auch aktuell ist.

      Ich habe bemerkt, dass die Signalisierung der Erreichbarkeit mit den Unreach Datenpunkten seit dem letzten Neustart meines Hosts nicht mehr funktioniert.
      Es werden diverse Geräte mit Unreach == true angezeigt, die aber ohne Probleme steuerbar sind und die auch nicht in der CCU (Raspberrymatic 3.73.9.20240130) als unerreichbar angezeigt werden.
      Ich habe auch schon hmrpc neugestartet mit der Option alle Datenpunkte neu einzulesen, aber es hat das Fehlerbild nicht geändert.

      Hat jemand einen Tip?

      posted in Error/Bug
      M
      Marty56
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo