Navigation

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

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 4
    • Topics 61
    • Posts 634
    • Best 34
    • Groups 2

    oberfragger

    @oberfragger

    Starter

    55
    Reputation
    222
    Profile views
    634
    Posts
    4
    Followers
    0
    Following
    Joined Last Online

    oberfragger Follow
    Pro Starter

    Best posts made by oberfragger

    • Anleitung - Gaszähler mit NodeMCU, ESPeasy

      Hallo,

      aufgrund des Forumseintrages hatte ich mir vorgenommen, meinen Gaszähler abzulesen. Leider war ich vom Know-How noch etwas vom Level entfernt, den Eintrag zu verstehen. Nun ist das Ganze "fertig" und ich habe mir sowie vorgenommen Einsteigerfreundliche Anleitungen zu schreiben (Irrtümer vorbehalten). Vorneweg: Für viele aus dem Forum ist dieser Beitrag vielleicht langweilig, aber vielleicht kann ich da jemanden mal mit helfen.

      Für mich war es der erste richtige Kontakt mit den NodeMCUs und dem ESP8266...

      Zusammenfassung: Eigentlich gar nicht so schwer, für die Teilprobleme gibts immer Hilfe
      Zeuitlicher Aufwand: Gar nicht so viel, wenn man schon mal was mit dem 8266 gemacht hat
      Kostenpunkt: Sehr gering (je nach Reed-Kontakt)
      Die einzelnen Positionen:
      Kabel die an den Pin-Out vom NodeMCU passen, oder halt anlöten
      1 NodeMCU - ca. 4,50 Euro (bei Ali ca. 2 Euro, dafür längerer Versand, Gearbest ca. 4,50 Euro dafür ca. 2 Wochen und aus D ab ca. 6 Euro)
      1 Pull-Up-Widerstand 10 KOhm - ca. 10 Cent (wenn an GPIO-14/D5 dann nicht notwendig)
      1 Leuchtdiode - ca. 20 Cent (nicht zwingend notwendig, signalisiert mir den Pulse)
      1 Widerstand 1kOhm für die Leuchdiode - ca. 10 cent
      Spannungsversorgung für den NodeMCU - habe ein MicroUSB-Kabel einfach an meinen Raspi geschlossen. Tut ansonsten aber ein rumfliegendes USB-Netzteil.
      Reed-Kontakt - 28 Euro bei Ebay.

      Habe mich für den passenden entschieden, damit ich unter der Gasbalge nicht rumfummeln muss und "Installationsfehler" reduzieren kann. Sieht auch schöner aus. Das Teil kann einfach unter die Gasbalge "geklickt" werden. Die Kabel werden im Gehäuse einfach nur mittels vorhandener Lüsterklemme festgeschraubt.
      8ea6c0c5-7871-4037-baee-97af1e803777-image.png

      1. Schritt - Flashen des NodeMCUs
        Dieser Schritt hat bei mir am längsten gedauert. Aber nur weil ich mich damit nicht so auskannte.
        Hier führen bekanntlich viele Wege nach Rom

      Ich habe leider etliche Zeit verschwendet, da nirgend deutlich auf die beiden Köpfe auf dem NodeMCU hingewiesen hat - Reset und Flash. Erst nachdem ichd as rausgefunden habe, hat es bei mir zuverlässig funktioniert. Sprich: Flashvorgang am PC starten, Flash-Taste gedrückt halten und kurz reset drücken! (Update- das ist bei Variante B nicht notwendig) Damit fährt die NodeMCU direkt im Flash-Modus hoch und die Programme funktionieren.

      Verkabelung des NodeMCU zum flashen

      a) Flashen via FTDI
      Hierfür benötigt man 4 female-female Kabel, 1 Mini-Usb-Kabel für den FTDI.
      Was bei mit nicht funktioniert hat- den FTDI-Jumper auf 3,3V zu setzen. Da hat Windows das Gerät immer nicht erkannt. Deshalb hab ich den Jumper wie auf dem Bild so gelassen wie er war.
      VCC - 5v
      GND - GND
      RX - TX
      TX - RX

      7075bbde-c3ba-49b4-8173-ff56939863bf-image.png

      b) Flashen direkt via MicroUSB-Kabel

      Ist von der verkabelung am einfachsten, Stolperstein ist allerdings das Micro-USB-Kabel. Nachdem ich wusste wie es geht, habe ich noch einmal wild rumprobiert und im Haushalt nur 1 Kabel gefunden mit welches dieses möglich war.
      Einfach die CP210x USB to UART Bridge VCP Drivers installieren und NodeMCU am MicroUSB-Kabel anschließen.

      Windows erkennt die Geräte und weist diesen oftmals Com3 oder 4 zu. bitte im Gerätemanager überprüfen damit man weiss, über welchen Com-Port kommuniziert wird.

      Sobald man also die Verkabelung wie in a) oder b) vorgenommen hat, kann man mit dem flashen beginnen.

      Flashen und download der Firmware

      ESPeasy Download
      Auf das entsprechende Release klicken (ja...den Link hatte ich echt immer übersehen) , runterladen und entpacken (aktuell ESPEasy_mega-20191208.zip). Im Hauptordner befinden sich gleich 2 Flash-Tools. Zum einden der ESP.Easy.Flasher.exe und zum anderen FlashESP8266.exe. Der Easyflasher hats bei mir auch nicht getan. Am einfachsten war FlashESP8266.exe.

      Dazu im Ordner bin die richtige Datei raussuchen (ESP_Easy_mega-20191208_normal_ESP8266_4M1M.bin) und in den Hauptordner kopieren. Dann FlashESP8266.exe starten und man erhält folgendes Bild.
      feb867ad-3dea-46ca-91e5-aeff7ea82d95-image.png

      Jetzt einfach auf "Flash" drücken und wie oben beschrieben- den "Flash"-Knopf gedrückt halten und einmal kurz auf "Reset" drücken. Dann startet der Flash-Vorgang auch schon recht schnell und das Programm bestätigt idealerweise mit "Flash erfolgreich". Für mich hat es hiermit am besten funktioniert.

      Der ESPEasyFlasher sieht so aus.
      99cd699f-cc7e-451d-a3d7-349cab1def61-image.png Irgendwie hat das nie so richtig geklappt, die Zeit zum erfolgreichen flashen zählte immer nicht runter.

      NodeMCU Flash Tool
      Das ganze ist auch hier beschrieben. Das NodeMCU-Flasher Tool runterladen (rechts oben, grüner Button, download) und starten. Unter Config kann man mittels Zahnrad das richtige .bin-File wählen und unter Operation "Flash(F)". Das hat bei mir recht lange gedauert f73db9bc-bcd2-48d7-ac6c-935de34b8a78-image.png

      Alternativ kann man auch Kompilieren & flashen mittels Arduino-Umgebung
      Dieser Schritt war bei mir recht aufwändig. Habe die entsprechenden Files dafür gefunden, aber es nie geschafft den NodeMCU zu flashen. Ständig wurden Bibliotheken nicht gefunden etc. Da es fertige .bin-Files gibt, ist dieses eher zu aufwändig. Deshalb beschreibe ich das nicht näher.

      Wie gesagt- viele Wege führen nach Rom und man kann über viele Wege das NODEMCU flashen. Der schwierigste Teil ist somit bereits beendet.

      Mit ESPeasy auf dem NodeMCU verbinden.
      Nach dem erfolgreichen Flashvorgang versorgt man die NODEMCU mit Strom (beispielsweise Netzteil+Micro-USB-Kabel). Die NodeMCU bootet und spannt ein Passwortgeschütztes WLAN auf. Mit diesem WLAN verbinden und als Passwort "configesp" eingeben. In dem nun erscheinenden Fenster trägt man die Daten des eigenen WLANs ein und startet das Gerät neu.
      bd4acc8e-c8dd-48f2-833b-54bd60b68160-image.png
      Nach dem Neustart verbindet sich das Gerät mit dem eingegebenen WLAN. Die entsprechende IP kann man beispielsweise über die Oberfläche seines Routers ermitteln.

      Jetzt gehts mit dem Verkabeln weiter:
      Die eine Seite des Reed-Kontaktes habe ich an GPIO14 geschlossen und die andere an GND darüber.
      b2897994-70bc-42dc-b88c-104abc1d7949-image.png Zusätzlich habe ich den 10kOhm Widerstand mit GPIO14 und der 3,3V Spannung verbunden. Gemäß @simatec ist dieser vermutlich garnicht notwendig. Siehe auch das Schaltbild. Damit ist die Wesentliche Verkabelung bereits erledigt!

      Da ich den Pulse mittels zusätzlicher LED signalisieren wollte, habe ich die +Seite der LED an D6/ GPIO12 und die andere Seite an GND geschlossen. Dazwischen noch den 1kOhm Widerstand. Seite ist egal. Ich hab den auf die GND-Seite geschlossen.
      441aee7d-90b6-4477-94b3-8460eebe3128-image.png

      Jetzt noch den Reed-Kontakt unter die Gasbalge klemmen (siehe Bild oben) und die NodeMCU mit Spannung versorgen.

      ESPeasy konfiguieren
      Aus der Config-Seite habe ich einen Unit-Name gesetzt und als Nummer die "1" gewählt. Der Unit-Name taucht dann später in MQTT auf. Unter "Tools" dann den Haken bei "Rules" machen und idealerweise den NTP-Hostname konfigurierern. Muss nicht, ist aber "schöner".
      8d2713e8-6a14-4afe-91f2-c79cb4498b9a-image.png

      Jetzt den PulseCounter unter Devices eintragen (add Device generic PulseCounter). Ich habe die folgenden Settings gewählt.
      5231891a-f0a2-499c-903e-0c47fcf0cb91-image.png

      Am wichtigsten ist das "enabled" und GPIO14 - Pulse. Für die values noch sprechende Namen vergeben und 0-Nachkommastellen auswählen. Als Interval habe ich 30 Sekunden gewählt, da die Differenz immer nach dieser Zeiteinheit zurück gesetzt wird. Anhand dieser zähle ich dann später den Gaszähler im ioBroker hoch. Das Ganze natürlich immer via submit an den NodeMCU übertragen.

      Als letztes im NodeMCU noch unter Controller MQTT einrichten. Wichtig ist die Portnummer. Ich habe ein paar Sonoffs unter 1883 bereits eingerichtet. Deshalb habe ich mich nun für den Port 1888 entschieden. IP vom ioBroker und die Login-Credentials auf dem ioBroker eintargen. Ganz unten noch auf "enabled" setzen und submitten.
      6a547572-e7b5-40bd-b00b-d74dfe34a4e2-image.png

      Mittels Leuchtdiode wollte ich mir ja den Pulse anzeigen lassen. Außerdem habe ich noch als "Heartbeat" die Onboard-Led alle 10 Sekunden blinken lassen. Das ganze macht man unter "Rules".

      on System#Boot do
       Monitor GPIO,14 //GPIO 14 -Reed-Kontakt überprüfen
        gpio,2,1	 //BoardLED anschalten	
        timerSet,1,10  //Timer 1 auf 10 Sekunden setzen
      endon
      
       on GPIO#14=1 do
        GPIO,12,0  //LED definitiv deaktivieren
       endon
      
       on GPIO#14=0 do
        GPIO,12,1  //LED einschalten
        Delay,3000 //3 Sekunden Pause
        GPIO,12,0  //Leb abschalten
       endon
      
      On Rules#Timer=1 do
       gpio,2,0     //BoardLED abschalten
       timerSet,2,1 //Timer 2 auf 1 Sekunde setzen
      endon
      
      On Rules#Timer=2 do  
       gpio,2,1     //BoardLED anschalten
       timerSet,1,10
      endon
      

      Das Abschalten der LED nach Zeit X ist wichtig falls der Gaszähler mal auf der "0" stehen bleibt. Dann würde die Leuchtdiode die ganze Zeit leuchten. Wenn man keine extra Leuchtdiode sonder die interne Diode nutzen möchte (GPIO2) dann einfach die ganzen Timer/ Regeln mit GPIO2 löschen und GPIO12 auf GPIO2 ändern.

      Jetzt gehts in den ioBroker
      Im ioBroker den MQTT-Server/Client-Adapter installieren. Die gerade gewählte Portnummer und die festgelegten Credentials aus dem letzten Schritt eintragen.
      29a93740-20d4-45cb-b86f-d83937e82ef6-image.png

      Hierdurch erscheint unter den Objekten bereits der Gaszähler.
      8364a8c5-24ff-4c5b-a390-335ce35ad0ed-image.png
      Da nach einem Stromverlust alle Werte genullt werden, müssen diese im ioBroker gespeichert werden. Dafür habe ich dann einen eigenen Datenpunkt angelegt. Das sind die wichtigsten Weret des DP.

          "role": "value",
          "type": "number",
          "unit": "m³",
          "read": true,
          "write": true,
          "desc": "Manuell erzeugt",
      

      Zusätzlich habe ich für spätere Verfeinerung dann noch weitere DP bzgl. der Kosten etc. angelegt. Das ist im ursprünglichen Forumsbeitrag von @h1ob und @GeorgS haber viel umfänglicher beschrieben.

      Jetzt muss der eigene DP noch via Script aktualisiert werden. Ich habe mir überlegt, dass bei der Aktualisierung der Diffenz der eigene Zähler sofort hochgezählt wird. Sollte dann der NodeMCU neu starten, wurde diese Veränderung ja bereits übertragen. Mein Blockly sieht dann so aus:
      491264a4-9ee2-43c1-819b-6a7a92a43694-image.png Das Script ist dann folgendes.

      on({id: 'mqtt.0.ESP_Easy_GAS.Gaszaehler.Differenz', change: "gt"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        setState("0_userdata.0.Gaszaehler.Zaehlerstand"/*Zaehlerstand*/, Math.round((getState("0_userdata.0.Gaszaehler.Zaehlerstand").val + 0.01)*100)/100);
      });
      

      Das Runden ist wichtig da die Operationen sonst manchmal krumme Werte ergeben.
      Achtung - das ist noch fehlerhaft bzw. der Zählerstand ist mit dem ioBroker-Zähler auseinander gelaufen. Ist ja zum Glück nur das Script bzw. die Eisnetlung auf dem ESP. Prinzipiell funktioniert das ja.Update folgt.

      Demnächst werde ich mich noch um ein vernünftiges Gehäuse kümmern und vor allem die monitäre Berechnung vernünftig machen. Dann vermutlich noch einen DHT22 anklemmen damit ich parallel die Temperatur und Luftfeuchtigkeit aus dem HW-Raum via MQTT habe.

      Auf diesem Weg- vielen Dank für die Idee und die Unterstützung von @SBorg, @h1ob und @GeorgS .

      Ich hoffe ich habe grobe Fehler weggelassen und vor allem anderen Anfängern geholfen bzw. gaanz Anfängerfreundlich dokumentiert.

      Falls Ihr Fehler findet oder Ergänzungen habt, bitte Kommentieren.

      posted in Praktische Anwendungen (Showcase)
      oberfragger
      oberfragger
    • RE: Hamburg - Usertreffen?

      Ich war noch das Foto schuldig!

      IMG_2429.JPG
      Alle abgebildete Personen haben mündlich der Veröffentlichung dieses Fotos hier im Forum zugestimmt.

      posted in Usergroups
      oberfragger
      oberfragger
    • Homekit via Yahka, HAM und Homebridge

      Hi,

      das hier dient nur der Doku und soll vielleicht einem Anfänger (wie mir aktuell) einmal kompakt etwas Licht in die Dunkelheit bringen.

      Sofern man seine Devices in Homekit (also im Apple-Gerät) haben möchte, sieht man den Wald vor lauter Bäumen nicht. Ich habe mir folgendes Wissen "angeeignet". Die Kommentare von mir sind natürlich rein subjektiv, Irrtum nicht ausgeschlossen.

      Ich verwende einen Raspi4 und habe einige Apple-Geräte im Haus, aber keine Homekit kompatiblen Aktoren. Ziel ist es, möglichst viele meiner Geräte auch ins Homekit zu bringen.

      ioBroker - Yahka
      Mittels diesen Adapters kann man die Geräte, welche bereits im ioBroker sind, ins Homekit bringen. Im Adapter werden Geräte angelegt, welche dann zusätzliche Services haben (Switch, Fan uvm.). Hier muss man schauen, wie man sein Gerät "richtig" konfiguriert. Leider gibt es wenig Anleitungen, die Meissten nutzen anscheindend schlicht nur Schalter oder Lightbulbs. Ich habe bisher kaum fertige Beispiele für komplexe Lösungen finden können. Sofern dieses reicht - alles super.

      In der letzten Zeit wird die Wiki-Seite des Adapters gut ausgebaut, weshalb man nun dort einige Beispiele für Yakha-Konfigurationen hat.

      ioBroker - HAM
      Dieser Adapter ermöglicht, native Homekit-Gerät in den ioBroker zu bringen. Das macht m.E., nur Sinn, wenn man das entsprechende Gerät nicht bereits über einen gerätespezifischen Adapter in ioBroker eingebunden hat. Ich habe beispielsweise zum ausprobieren eine MiHome-Lampe in meinem System. Diese war nicht via ioBroker eingebunden. Adapter gestartet- zack, war die da.

      Zusätzlich bietet der Adapter wohl die Möglichkeit Homebridge Plugins einzubinden und mittels der Homebridge-Konfiguration weitere Geräte hinzuzufügen. Habe ich noch nicht probiert.

      Homebridge
      Homebridge hat mit ioBroker ersteinmal garnichts zu tun tun, kann aber das gleiche wie der Yahka-Adapter. Es kann Geräte in Homekit einbinden. Hierzu wird eine entsprechende Bidge durch das Programm erstellt. Die einzelnen Geräte müssen mittels Plugins installiert und dann konfiguriert werden. Oftmals mit IP-Adresse etc. Homebridge hat eine aktive Community und viele Plugins. Mittels der Homebridge-GUI ist die Installation und Konfiguration von zusätzlichen Plugins sehr gut möglich.

      Allerdings ist ein Gerät nach der Einbindung in Homebridge nur im Homekit sichtbar! Das Gerät müsste also mittel HAM dann in den ioBroker gebracht werden. Ist natürlich irgendwie Quatsch falls es einen passenden Adapter im ioBroker gibt.

      Ich habe Homebridge und GUI unter zu Hilfenahme dieser Anleitung eingebunden:Homebridge Anleitung pdf. Aufpassen: Homebridge verwendet auch NodeJS. Sofern man zum aktuellen Stand NodeJS gleich auf LTS updaten würden... geht man auf Version 12. Danach war beispiesweise der Smartmeter-Adapter kaputt.

      Ich hoffe Euch hat diese Zusammenfassung gefallen.

      posted in Praktische Anwendungen (Showcase)
      oberfragger
      oberfragger
    • Hamburg - Usertreffen?

      Moin in die Runde,

      gibt es in Hamburg vielleicht bereits einen Stammtisch/ Austausch oder ein (un)regelmäßiges Treffen?

      Hat wer Interesse?

      posted in Usergroups
      oberfragger
      oberfragger
    • Wemos D1 mini Pro, Tasmota und diverse Sensoren

      Moin,

      ich dachte ich zeig mal was ich so gebaut habe. Für die meissten nichts wesentlich neues aber es soll doch insbesondere Anfänger die 8266 Devices und Möglichkeiten ein bisschen näher bringen.

      Zuallerest war die Fragestellung - wie voll ist meine Zisterne? Nach ein wenig Recherche habe ich mich dann für seinen wasserdichten SR04 Ultraschallsensor inkl. Messwandler-Modul entschieden.

      Aufgrund der Lage der Zisterne (in der Erde!), wusste ich, dass ggf. Wlan ein Problem darstellen könnte. Mit externer Antenne sollte das gehen. Ich habe häufig mit NodeMCUs gearbeitet. Die waren nun keine alternative aufgrund der Antenne driekt auf dem NodeMCU ohne einfache Möglichkeit eine externe Antenne anzuschliessen. Hier habe ich dann einen Wemos D1mini Pro genommen.

      Die Zisterne hat eine Verbindung zum Schuppen- die Stromkabel für die Pumpen sind dort durchgeführt. Den Strom habe ich dann mittels langem USB-Kabel in die Zisterne geführt. Den SR04 in ein Holzbrett gebaut. Somit konnte ich sicherstellen, dass der immer an der gleichen Stelle misst und ich die Zisterne noch anbohren muss. Tasmotada drauf... dann noch Temperatiur Sensor reingeworfen und das ganze in eine Plastikbox von Q-Tips. Fertig. Somit kann ich mir auch eine Warnung schicken, sollte es mal in der Zisterne frieren! Dann heisst es Wasser schnellstens ablassen...

      Ab und an war der Sensor aber weg und ich musste das Gerät neu starten. Wlan war doch nicht so zuverlässig. Also das ganze musste nun erneuert werden.
      Ziel: Stabiles WLAN und Wemos sollten nicht in der dauerhaft feuchten Umgebung arbeiten
      Deshalb verlegen des Wemos in den Schuppen mit einem "vernünftigen" Case.

      Hier sieht man die Zustände in der Zisterne:
      38ac7290-307f-4a6c-84a3-733694bb54eb-image.png

      Learnings: Verlängerung des SR04 (Ablöten auf dem Messwandler Modul und das Kabel verlängern führt zu fehlerhaften Messwerten. Zum Glück war das Kabel lang genug um in den Schuppen zu kommen. Dem Am2301 ist die Kabellänge egal.

      Idee: Wenn das Case sowieso im Schuppen ist- kann ich doch gleich die Temperatur im Schuppen abfragen. Super! Temperatursensoren waren noch 2 da- BME 280 und AM2320. Also ab in den Schuppen damit. Den AM2320 wollte ich loswerden. Nervige kleine Dinger. Lieber BME280 nehmen.
      Dank avorak habe ich dann auch aktuelle Tasmota Treiber für den 2320 bekommen:
      https://github.com/arovak/tasmota-am2320-i2c-driver

      Nebei nochmal Tasmota comiplieren mit PlatformIO gelernt-> In den aktuellen Tasmota Versionen mus der SR04, BME280 und AM2320 aktiviert und dann komiliert werden. SO hatte ich dann auch ein aktuelles 9.2er Tasmota.

      Als Case dann so einen Abzweigkasten genommen. Mein Ziel: Modularer Aufbau, falls man doch mal da ran muss. Da will ich nicht im Schuppen löten und die ganze Verkabelung machen.

      Zusammenstecken und im trockenen Zustand testen:
      99ea2293-267f-4093-8235-1cc8e1394ed9-image.png

      Weiterhin heisst es modular bleiben- alles mit Buchsen/ Steckern o.ä. anschliessen. Hier schon mal ein bisschen Kabelwust. Der Platz ist mittlerweile echt knapp. Für GND , 3,3V und 5V habe ich eine extra "Verteilerleiste" reingebaut. Das ganze ist auf dem Karton/ Holz, damit der Heisskleber besser hält.
      41d08cd3-c35d-45b6-b71d-98b1b70f7932-image.png

      Hier wird der AM2301 (Temperatur in der Zisterne) angeschlossen.
      fed347ef-6732-4c35-995d-16c5154bd1f9-image.png

      WLAN-Antennenbuchse, SR04 Buchse, BME280 (Temperatur im Schuppen)
      4d272ff1-4b5b-47e5-a1ee-53a5458d561e-image.png

      Und ne Wlan-Antenne hatte ich auch noch. Der Magnetfuss hält super im Schuppen.
      7bc6562b-2dcb-4904-92a1-cb83480bad9b-image.png

      Da ich sowieso im Schuppen bin... ich wollte sowieso immer mal einen Regensensor haben um den Rasenmäher Roboter reinzuschicken, wenn es regnet. Da ist mir doch glatt dieses hier begegnet:
      https://www.tekkiebros.de/index.php/2018/11/24/smarte-diy-wlan-wetterstation/

      Zusätzlich nervte mich auch, dass ich den 220 V Helligkeitssensor noch abgreifen kann. Die kurze Recherche hat den BH1750 ergeben -> das passt ja gut. Genauso wie der BME280, AM2320 ist auch das ein I2C-Gerät. Also keine weiteren GPIOs weg!

      Hier also die gedruckte Wetterstation mit Helligkeitssensor vorne dran.
      b329a12a-4617-4b8c-8eec-912b68303050-image.png

      Am Schuppen sieht das dann so aus. Auch mit entsprechendem Stecker falls man da mal ran muss. Kabelführung kann noch besser...
      66e2ee59-0342-4535-b4e7-fb6a4f51c084-image.png

      Das Ganze natürlich zwischendurch immer in Tasmota konfiguriert:
      cb4176bd-e67f-4367-9599-68381440695f-image.png

      In der Weboberfläche sieht das dann so aus.
      59673558-a22b-4fd8-ab5a-3c1fea388fe9-image.png

      So liegt es dann im Schuppen. Da ist noch ein Lattenrost drauf und nicht mehr so sichtbar:
      7512679c-df33-4f3c-8f10-8aab48f79695-image.png

      Mit dem Tasmota-Adapter habe ich die ganzen Sensoren natürlich im ioBroker. Werde bei Gelegenheit aber auf den MQTT- Adapter schwenken.

      Nächste Schritte:

      Ich habe noch genau 4 GPIOs frei 😉

      1. Reed-Kontakt an der Tür
      2. Relais an der einen Pumpe (um die Zisterne in den Kanal zu leeren, Gartenpumpe ist ein Gardena-System dran). Kann ich dann entsprechend automatisieren bzw. bei Bedarf die Zisterne leeren
      3. Lichtschalter anschließen
      4. Licht ans Relais schließen

      Somit kann ich dann weitere Dinge automatisieren. Beispielsweise Licht automatisch von der Helligkeit einschalten, Licht bei vermuteten Einbrauch einschalten, Zisterne leeren etc.

      Ich will demnächst noch ne ESP32Cam im Schuppen anbringen. Die kann ich dann via Motion überwachen. Da muss ich demnächst klären, wie ich eine Matrix-Tastatur da zusätzlich anschliessen kann. Dann kann man mit der Eingabe auf der Tatstur vielleicht die Gartenbewässerung starten, Alarm ausschalten etc.

      Ich hoffe der Beitrag hat euch ein bisschen gefallen.

      Update 09.06.2021

      Ich habe die Idee gehabt zusätzlich mal Relais auszuprobieren und entsprechend aufgerüstet. Der Reed-Kontakt für die Tür ist nur noch nicht installiert.
      Nun sind ALLE! GPIOs belegt und ich habe einiges dazugelernt. Beispielsweise dass nicht alle GPIOs für Switches taugen, da der Wemos sonst nicht aufwacht, falls der Schalter falsch gelegt ist. Siehe hier:
      https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

      Außerdem dass nicht alle China-Ralais bei 5V schalten, obwohl das drauf steht, sondern u.U. nur bei 3,3V.

      Weiteres wichtiges Lessons learned- bisher war die angeschlossene WLAN-Antenne nur Vodoo! Man muss auf dem Wemos die SMA-Buchse aktivieren. Nun ist das Device endlich verlässlich erreichbar!

      Also- in die Zisterne den Am2320 gelegt. Musste nun natürlich das Kabel auf 4-adrig wechseln für den I2C Bus (GND, VCC, SDA, SCL). Dadurch ist der AM2301 weggefallen und hat 1nen PIN freigegeben. Dann 3 Schalter. Licht, 2. Pumpe in der Zisterne und weiterer Schalter- 3 weitere GPIOs weg, außerdem natürlich noch die entsprechenden Relais dafür.

      Tasmota mit aktivierten BME680 neu kompiliert. Übrigens in weiser Vorrausschau die Adresse des BME680 auf die 2. Adresse gelegt. War natürlich Quatsch... musste nicht sein. BME280 ist standradmäßig auf Adresse x77 und der BME680 auf Adresse x76.

      So ist es jetzt konfiguriert:
      27c6c38e-60bb-4ef2-b066-132cab66ef69-image.png

      posted in Praktische Anwendungen (Showcase)
      oberfragger
      oberfragger
    • RE: Intel NUC für ioBroker, motioneye und NAS?

      @phoenix_83
      Ich habe nen alten i3 - D34010WYK. Läuft mehr als gut. Hab den auf 8Gb... bisscher mehr RAM wäre natürlich noch netter. Du hast darauf pihole vergessen!

      Habe wegen ner Festplattenproblematik (1TB SDD zieht in der Spitze zuviel Strom vom USB-Port) von RPI4 auf i3 gewechselt- Träumchen. Backup einspielen, fertig die Laube.

      Natürlich mit Proxmox. Wenn du BLE verwenden willst- bitte VM und nicht LXC Container nehmen.

      Zu 3- hört sich doch ganz gut an. Wenn du faul bist lässt du openmediavault drauf laufen (im eigenen Container bzw. VM).

      posted in Hardware
      oberfragger
      oberfragger
    • RE: [geloest] Wert eines Objektes nicht auslesbar

      @dslraser Auf jeden Fall danke für Deine Mühe. Wenn Du in HH bist, komm gern rum und wir erhöhen den Kaffeecounter 😉

      posted in Blockly
      oberfragger
      oberfragger
    • RE: MQTT ESP8266 Verbindung aufbauen

      @danny_v1 Hi,
      ich habe das ganze mit MQTT und einem Gaszähler als Anwendungsfall mal gaanz langsam hier erklärt.
      https://forum.iobroker.net/topic/27923/anleitung-gaszähler-mit-nodemcu-espeasy/2

      Ich hoffe das hilft auch. Auf jeden Fall ziemlich einfach im nachhinein betrachtet.

      posted in Microcontroller
      oberfragger
      oberfragger
    • Dunstabzugshaube mit Homekit steuern

      Hallo,

      ich habe gerade etwas rumgefrickelt und bin auf ein paar Probleme gestoßen. Diese habe ich nun m.E. lösen können und sollen anderen ggf. helfen.

      Vielen Dank auch an @paul53.

      Ziel: Die Lüftung und das Licht der Haube sowohl via Gerät, als per Bosch-App und Homekit steuern

      Gerät: Bosch DWK97JR60 (geht sicher auch mit anderen Dunstabzugshauben/ Geräten)
      Adapter: Yahka 0.92, Homeconnect 0.0.26

      1. Problem - Lüfter an/aus homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState steuert man den Datenpunkt nicht via true/false sondern via BSH.Common.EnumType.PowerState.On/ BSH.Common.EnumType.PowerState.Off

      Okay - das kann man via Mapping im Yahka-Service erledigen... irgendwie

      1. Problem - Das Arbeitslicht homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting darf nicht via true/false MIT ACK geändert werden, sondern nur ohne ACK, sonst geht das nicht

      2. Problem - Die direkte Verknüpfung der DP mit Homekit hat leider dazu geführt, dass die Kopplung zwischen Dunstabzugshaube und Herd ständig aufwendig neu hergestellt werden musste.

      Aufgrund der 3 Probleme habe ich ein eigenes Gerät erstellt... aber nun von Beginn an:

      1. Erstellen eines eigenen Objektes. Hierzu oben auf + drücken, wegen der Übersichtlichkeit habe ich ein Gerät mit 2 Tochterobjekten erstellt (states)
        bcc2c032-d00a-4278-9495-4e9b4df5e30b-image.png

      2. Erstellen des Gerätes in Yahka und verknüpfen mit den eigenen Datenpunkten
        1700a06a-2712-4091-a8db-535ea399f025-image.png

      2 Zusätzliche Services (zuerst den Fan, dann den Lightbulb) und mit den DP verknüpfen
      28fb55d3-8bd4-4438-93f5-ecb73cf1f50c-image.png
      747cd4f4-f5a5-4bc4-a0fc-e299b34dc180-image.png

      1. Erstellen eines Scriptes, welches die Status zwischen eigenen DP und den originalen DP syncronisiert. Hierbei ist wichtig, dass die eigenen DP nicht durch JavaScript-Anpassungen getriggert werden dürfen, da sich das Script ansonsten selbst steuert.

      In dem Script wird dann auch das Mapping erledigt (wenn BSH.Common.EnumType.PowerState.Off dann setze false usw.)

      Außerdem wird mit den Script sichergestellt, dass kein ACK gesendet wird (setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/Arbeitslicht/, 'true', false). Deshalb ist das Script aus meiner Sicht nur mit Blockly nicht möglich. Falls doch, bitte Rückmeldung hier, dann weiss ich das für die Zukunft. Grundlage bildete natürlich Blockly...

      Jetzt nur noch das untere Script einbinden und starten. In den ersten beiden Blöcken übertrage ich die Änderung des Lichtes aus dem eigenen Datenpunkt an den original Datenpunkt und zurück. In den letzten beiden Blöcken das Ganze mit dem Lüfter.

      Bei Optimierungsmöglichkeiten - gern her damit.

      Das Ganze hier soll Euch als Unterstützung für eigene Dinge dienen. Ich hoffe ich war ausführlich genug und es hilft jemanden.

      // Uebertragen der Datenpunkt-Anderung des Lichtes (z.B. aus Homekit) auf Original Datenpunkt und damit steuern des Geraetes, Wichtig: Kein ACK setzen, da es im Adpater sonst nicht funktioniert
      on({id: '0_userdata.0.Dunstabzugshaube.Licht', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if ((obj.state ? obj.state.from : "") != 'system.adapter.javascript.0') {
        if (getState("0_userdata.0.Dunstabzugshaube.Licht").val == true) {
          setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/*Arbeitslicht*/, 'true', false);
        }
        if (getState("0_userdata.0.Dunstabzugshaube.Licht").val == false) {
          setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting"/*Arbeitslicht*/, 'false', false);
        }
        }
      });
      
      // Uebertragen der Aenderungen am Original Datenpunkt bzgl. Licht (App, Bedienung am Geraet) zum setzen im eigenen Datenpunkt
      on({id: 'homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting").val == true) {
          setState("0_userdata.0.Dunstabzugshaube.Licht"/*Licht*/, true, true);
        }
        if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.Cooking_Common_Setting_Lighting").val == false) {
          setState("0_userdata.0.Dunstabzugshaube.Licht"/*Licht*/, false, true);
        }
      
      // Uebertragen der Datenpunkt-Aenderungen des Luefters (z.B. aus Homekit) und steuern des Geraetes  
      on({id: '0_userdata.0.Dunstabzugshaube.Luefter', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if ((obj.state ? obj.state.from : "") != 'system.adapter.javascript.0') {
        if (getState("0_userdata.0.Dunstabzugshaube.Luefter").val == true) {
          setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState"/*Energiezustand*/, 'BSH.Common.EnumType.PowerState.On', false);
        }
        if (getState("0_userdata.0.Dunstabzugshaube.Luefter").val == false) {
          setState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState"/*Energiezustand*/, 'BSH.Common.EnumType.PowerState.Off', false);
        }
        }
      });
      
        // Uebertragen der Aenderung am Geraet (Bedienung oder APP) zum setzen im eigenen Datenpunkt  
      on({id: 'homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState").val == 'BSH.Common.EnumType.PowerState.On') {
          setState("0_userdata.0.Dunstabzugshaube.Luefter"/*Luefter*/, true, true);
        }
        if (getState("homeconnect.0.BOSCH-DWK97JR60-68A40E08BCBC.settings.BSH_Common_Setting_PowerState").val == 'BSH.Common.EnumType.PowerState.Off') {
          setState("0_userdata.0.Dunstabzugshaube.Luefter"/*Luefter*/, false, true);
        }
      });
      });
      

      So sieht das dann im iPhone aus. In der Übersicht sieht mann dann einen schönen drehenden Lüfter.!!IMG_2426.PNG IMG_2425.PNG

      posted in Praktische Anwendungen (Showcase)
      oberfragger
      oberfragger
    • RE: RCWL-0516 - Wemos D1 Mini -Tasmota- FalsePositive

      @christoph1337 Hast du mal probiert um die Kabel so einen Ferritkern zu setzen. Hatte ähnliches bei einem PIR.
      Den Ferritkern habe ich einfach aus einem alten VGA-Kabel rausgepopelt.
      Seitdem ists "ruhig".

      posted in Hardware
      oberfragger
      oberfragger

    Latest posts made by oberfragger

    • RE: OpenHasp Erfahrung/Nutzbar ohne Adapter?

      @richiexx Ich hab die "Anleitung" aus zeitlichen Gründen noch nicht geschrieben.
      im Prinzip:

      1. Eigenen MQTT-Server (nicht der in ioBroker) aufsetzen
      2. MQTT-Client Adapter installieren und openHasp damit verbinden
      3. Mittels Script die Datenpunkte wie gewünscht anlegen (Werte können in "Blockly-Eingabefelder" eingegeben werden, das Script legt dann die notwendigen Datenpunkte unter 0_userdata an.

      Optional (wenn man sich Arbeit sparen möchte)
      1a. openHasp mit dem ioBroker - MQTT-Server verbinden und alle Buttons drücken, diese werden dadurch zumindest schon mal angelegt. Und dann
      1b. Ein Script ausführen, welches alle vorhandenen Datenpunkte unter MQTT in Datenpunkte (sowohl state als auch command) in Datenpunkte mit MQTT unter userdata_0 anlegt.

      Mittel Schritt 3 können dann später nochmal Datenpunkte nachgezogen werden.

      Oder halte ohne Script alle Datenpunkte (sowohl state als auch command) händisch anlegen.

      posted in ioBroker Allgemein
      oberfragger
      oberfragger
    • RE: OpenHasp Erfahrung/Nutzbar ohne Adapter?

      @mcm1957 - Richtig und nachvollziehbar.
      Kurz zur Erklärung - der Adapterrequest kam nicht von mir. Ich habe nur die Infos ergänzt und in Github jeweils die Links mitgeschickt. Kann ich auch verstehen, dass kein Adapter entwicklet werden soll oder muss. Wenn nur das Problem mit den Values nicht wäre.

      Beim MQTT-Adapter gings nicht weiter und/ oder das Problem wurde nicht verstanden.

      Hier im Forum schienen das Problem bekannt und verstanden zu sein. Also dann weiter hier?

      Ich versuche gerade einen Workaround mittels Script zu bauen, der von nachfolgenden Usern genutzt werden kann damit die Display möglichst einfach eingestezt werdne können.

      posted in ioBroker Allgemein
      oberfragger
      oberfragger
    • RE: OpenHasp Erfahrung/Nutzbar ohne Adapter?

      So richtig verstehe ich das nicht.

      Wenn dr Button in openHasp ein Colorpicker ist, dann zeigt der MQTT-Adapter auch nen vernünftigen Wert an.
      {"event":"up","color":"#f600ff","r":246,"g":0,"b":255,"h":297,"s":100,"v":100}

      wenn es aber ein Button mit einem normalen Wert ist (0,1, Wert) wie hier
      {"event": "up","val": 4419}
      dann kommt im MQTT-Adapter nichts an. Im Log steht halt dann server recieved...

      Das sieht doch sehr sehr ähnlich aus... auch im MQTT Explorer.
      9aa2398c-113c-4997-9f28-e57c62061f91-grafik.png

      Wo liegt da der Unterschied?

      posted in ioBroker Allgemein
      oberfragger
      oberfragger
    • RE: OpenBeken (ähnlich Tasmota) Steckdose schalten. MQTT?

      @pillepalle127 Was verwendest du dafür?

      Auch TCP wie @geschild ? Mit was bzw. welchem Adapter schaltet du aus ioBroker?

      posted in Einbindung von Geräten
      oberfragger
      oberfragger
    • RE: [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      Kurzes Update.
      Das Script & Blockly scheint fertig. Damit kann ich nun recht generisch Datenpunkte für openHasp-Displays erstellen bzw. für die diversen Buttons.

      @paul53 hat Starthilfe gegeben. Danke nochmal.
      Den Rest dann mit chatgpt beendet. Waren noch paar kleine Stolpersteine drin.

      Wenn ich auch passende Scripte fertig und alles getestet habe, dann schreibe ich mal eine Anleitung für openHasp.

      cbed5891-de9b-4916-8db9-71066cb384d4-grafik.png

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="t]mHQ2(O[i~,~{Z1[+%!">button_id</variable>
          <variable id="mPT5a/ZZM;ltIo{jt;]v">buttonfunktion</variable>
          <variable id="O5fjg~@mC^kh:.OT[4tI">speicherpfad</variable>
          <variable id="r2OFNb5JSoE#g];#4K3Y">pretopic</variable>
          <variable id="5gtZow7y)14]oqV=GyN|">hostname</variable>
          <variable id="`wmra-.jA.[a)@dMnQN7">type</variable>
        </variables>
        <block type="procedures_defcustomnoreturn" id="@UFkkX.yv%])Ff}F2;|j" x="238" y="163">
          <mutation statements="false">
            <arg name="button_id" varid="t]mHQ2(O[i~,~{Z1[+%!"></arg>
            <arg name="buttonfunktion" varid="mPT5a/ZZM;ltIo{jt;]v"></arg>
            <arg name="speicherpfad" varid="O5fjg~@mC^kh:.OT[4tI"></arg>
            <arg name="pretopic" varid="r2OFNb5JSoE#g];#4K3Y"></arg>
            <arg name="hostname" varid="5gtZow7y)14]oqV=GyN|"></arg>
            <arg name="type" varid="`wmra-.jA.[a)@dMnQN7"></arg>
          </mutation>
          <field name="NAME">paul53</field>
          <field name="SCRIPT">Y29uc3QgY3JlYXRlVG9waWMgPSAoYWN0aW9uKSA9PiBgJHtwcmV0b3BpY30vJHtob3N0bmFtZX0vJHthY3Rpb259LyR7YnV0dG9uX2lkfWA7DQpjb25zdCBjcmVhdGVJRCA9IChhY3Rpb24pID0+IGAwX3VzZXJkYXRhLjAuJHtzcGVpY2hlcnBmYWR9LiR7aG9zdG5hbWV9LiR7YWN0aW9ufS4ke2J1dHRvbl9pZH1gOw0KDQpjb25zdCBzdGF0ZXRvcGljID0gY3JlYXRlVG9waWMoJ3N0YXRlJyk7DQpjb25zdCBjb21tYW5kdG9waWMgPSBjcmVhdGVUb3BpYygnY29tbWFuZCcpICsgKHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ251bWJlcicgPyAnLnZhbCcgOiAnJyk7DQoNCmNvbnN0IHN0YXRlX2lkID0gY3JlYXRlSUQoJ3N0YXRlJyk7DQpjb25zdCBjb21tYW5kX2lkID0gY3JlYXRlSUQoJ2NvbW1hbmQnKTsNCg0KLy8gU3RhbmRhcmR3ZXJ0IGbDvHIgZGVmDQpjb25zdCBnZXREZWZhdWx0VmFsdWUgPSAodCkgPT4gKHQgPT09ICdudW1iZXInID8gMCA6IHQgPT09ICdib29sZWFuJyA/IGZhbHNlIDogJycpOw0KDQpjb25zdCBzdGF0ZV9jb21tb24gPSB7DQogICAgbmFtZTogYnV0dG9uZnVua3Rpb24sDQogICAgcm9sZTogInN0YXRlIiwNCiAgICB0eXBlOiAic3RyaW5nIiwNCiAgICByZWFkOiB0cnVlLA0KICAgIHdyaXRlOiBmYWxzZSwNCiAgICBkZWY6ICcnLA0KICAgIGN1c3RvbTogew0KICAgICAgICAibXF0dC1jbGllbnQuMCI6IHsgZW5hYmxlZDogdHJ1ZSwgcHVibGlzaDogZmFsc2UsIHN1YnNjcmliZTogdHJ1ZSwgdG9waWM6IHN0YXRldG9waWMgfQ0KICAgIH0NCn07DQoNCmNvbnN0IGNvbW1hbmRfY29tbW9uID0gew0KICAgIG5hbWU6IGJ1dHRvbmZ1bmt0aW9uLA0KICAgIHJvbGU6ICJzdGF0ZSIsDQogICAgdHlwZSwNCiAgICByZWFkOiB0cnVlLA0KICAgIHdyaXRlOiB0cnVlLA0KICAgIGRlZjogZ2V0RGVmYXVsdFZhbHVlKHR5cGUpLA0KICAgIGN1c3RvbTogew0KICAgICAgICAibXF0dC1jbGllbnQuMCI6IHsgZW5hYmxlZDogdHJ1ZSwgcHVibGlzaDogdHJ1ZSwgc3Vic2NyaWJlOiBmYWxzZSwgdG9waWM6IGNvbW1hbmR0b3BpYyB9DQogICAgfQ0KfTsNCg0KY3JlYXRlU3RhdGUoc3RhdGVfaWQsICcnLCBzdGF0ZV9jb21tb24pOw0KY3JlYXRlU3RhdGUoY29tbWFuZF9pZCwgZ2V0RGVmYXVsdFZhbHVlKHR5cGUpLCBjb21tYW5kX2NvbW1vbik7</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
        <block type="comment" id="$RQ:rwIC/g6xPOV+A1Ss" x="237" y="212">
          <field name="COMMENT">Adapter: mqtt-client.0&amp;#10;button_id: Den Button angeben&amp;#10;buttonfunktion: Was soll durch den Button ausgelöst werden&amp;#10;speicherpfad: hinter userdata_0.0&amp;#10;pretopic: siehe mqtt-setting des hasp devices&amp;#10;hostname des hasp-devices&amp;#10;typ des Buttons (bool, string, number)</field>
          <next>
            <block type="on" id="V?L;5Nr}OxT)BT]~^#Jc">
              <field name="OID">0_userdata.0.test</field>
              <field name="CONDITION">ne</field>
              <field name="ACK_CONDITION"></field>
              <statement name="STATEMENT">
                <block type="controls_if" id="0),V(RPzI|S:?3|,7W]!">
                  <value name="IF0">
                    <block type="on_source" id="3z%t2xus(;q~YGyZh}SN">
                      <field name="ATTR">state.val</field>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="procedures_callcustomnoreturn" id="=gS(Blp?cNt|^k7%1[k%">
                      <mutation name="paul53">
                        <arg name="button_id"></arg>
                        <arg name="buttonfunktion"></arg>
                        <arg name="speicherpfad"></arg>
                        <arg name="pretopic"></arg>
                        <arg name="hostname"></arg>
                        <arg name="type"></arg>
                      </mutation>
                      <value name="ARG0">
                        <block type="text" id="E~iotn9wF;Let({7%t2E">
                          <field name="TEXT">p1b7</field>
                        </block>
                      </value>
                      <value name="ARG1">
                        <block type="text" id="FAP!atq!u%WrvXl^R2ts">
                          <field name="TEXT">Lampe Ecke Helligkeit</field>
                        </block>
                      </value>
                      <value name="ARG2">
                        <block type="text" id="umuTAU1|5gG|sv/$[=6a">
                          <field name="TEXT">Büro</field>
                        </block>
                      </value>
                      <value name="ARG3">
                        <block type="text" id="f{Ht+f@lncWjnT7EMvY7">
                          <field name="TEXT">hasp</field>
                        </block>
                      </value>
                      <value name="ARG4">
                        <block type="text" id="Jr_osU%Iy/{u}}oP=Os3">
                          <field name="TEXT">buero_sofa</field>
                        </block>
                      </value>
                      <value name="ARG5">
                        <block type="text" id="||K]*]sydI[Jq6;7:*O|">
                          <field name="TEXT">number</field>
                        </block>
                      </value>
                      <next>
                        <block type="control" id="I@W^acpevmW@{].wv{Cb">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">0_userdata.0.test</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="logic_boolean" id="S=gT0|j);wtj0Jsc1Maa">
                              <field name="BOOL">FALSE</field>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </next>
        </block>
      </xml>
      
      const createTopic = (action) => `${pretopic}/${hostname}/${action}/${button_id}`;
      const createID = (action) => `0_userdata.0.${speicherpfad}.${hostname}.${action}.${button_id}`;
      
      const statetopic = createTopic('state');
      const commandtopic = createTopic('command') + (type.toLowerCase() === 'number' ? '.val' : '');
      
      const state_id = createID('state');
      const command_id = createID('command');
      
      // Standardwert für def
      const getDefaultValue = (t) => (t === 'number' ? 0 : t === 'boolean' ? false : '');
      
      const state_common = {
          name: buttonfunktion,
          role: "state",
          type: "string",
          read: true,
          write: false,
          def: '',
          custom: {
              "mqtt-client.0": { enabled: true, publish: false, subscribe: true, topic: statetopic }
          }
      };
      
      const command_common = {
          name: buttonfunktion,
          role: "state",
          type,
          read: true,
          write: true,
          def: getDefaultValue(type),
          custom: {
              "mqtt-client.0": { enabled: true, publish: true, subscribe: false, topic: commandtopic }
          }
      };
      
      createState(state_id, '', state_common);
      createState(command_id, getDefaultValue(type), command_common);
      
      posted in Skripten / Logik
      oberfragger
      oberfragger
    • RE: [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      @paul53 Keine Ahnung- jetzt klappts bei mir auch.

      Ich hangel mich gerade durch. Muss noch bisschen frickeln, so dass ich die notwendigen Sachen aus dem blockly an die Funktion übergeben bekomme.
      f1f560d4-84c8-4f9b-9154-2fb3c5c4fcea-image.png

      Danke auf jeden Fall für deine Mühe.
      Nach ein bisschen grübeln habe ich auch verstanden was du hier machst:
      873e9266-6c38-4bbf-b3dd-7c026afbdbed-image.png
      Mein Ziel ist es primär, die notwendigen Variablen an die Funktion zu übergeben (zum Beispiel Button "p7b77") und dann legt er mir für jeden Button sowohl einen state, als auch command an. Somit kann ich dann bequem für jeden Button auf dem openHasp-Display die Sachen eingeben und beide Datenpunkte automatisch generieren lassen. Und wenn das klappt, dann schaue ich mir mal die Alias-Geschichte an.

      posted in Skripten / Logik
      oberfragger
      oberfragger
    • RE: [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      @paul53 Ich hab gerade den von mir generierten Datenpunkt gefunden- der wurde unter javascript.0 erstellt. So wie du geschrieben hast. Das ist natürlich nicht so schön. Userdata.0 ist ebsser.
      e7e5c599-824d-4268-a665-526d7a3c148e-image.png

      Mit dem vorletzten Script von dir, erstellt er mir leider garnix. Ich möchte mich da halt langtasten und sukzessive verstehen was ich da mache -> dann kann ich das auch mal selbst machen.

      Hier ist das Blockly (wie gesagt- ich möchte später mal einfach die Werte wie Button etc. eintragen und somit schnell erstellen können. Die Idee mit dem Alias finde ich super. Aber Schritt für Schritt.

      Warum wird bei Aktivierung (ich setze da einfach den Datenpunkt auf "true" um das Script dann auszuführen...) der Datenpunkt unter userdata.0 nicht erstellt?

      posted in Skripten / Logik
      oberfragger
      oberfragger
    • RE: [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      @paul53 Danke.
      Das werde ich probieren. Ich poste ein Update.

      Wenn ich das so wie gewünscht hinbekomme, kann es meines Erachtens die Benutzung von openHasp-Devices für alle enorm vereinfachen, da leider mit normalem MQTT keine zurückgegeben Werte ausgewertet werden können.

      posted in Skripten / Logik
      oberfragger
      oberfragger
    • RE: [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      @codierknecht sagte in Generischen Datenpunkt via Blockly erstellen:

      @oberfragger
      Zunächst wäre es wohl hilfreich, der Funktion auch ein paar Parameter mitzugeben 😉

      3cf7036a-a6c5-4950-b8b2-220e23846bb2-image.png

      Oh. Vielen Dank. Logisch.

      Sorry, nächste Frage...
      Ich hab mal bisschen mit dem Copilot gespielt (bestehenden Datenpunkt genommen und einfach mal ID verändert. So wollte ich mal via JS das alles anlegen.

      const datapoint = {
          common: {
              name: "p7b77_Power_Sofalampe_Mitte",
              desc: "Manuell erzeugt",
              role: "state",
              type: "string",
              read: true,
              write: true,
              def: "",
              custom: {
                  "mqtt-client.0": {
                      enabled: true,
                      publish: false,
                      pubChangesOnly: false,
                      pubAsObject: false,
                      qos: false,
                      retain: false,
                      subscribe: true,
                      subChangesOnly: false,
                      subAsObject: false,
                      subQos: false,
                      setAck: false,
                      topic: "hasp/buero_sofa/state/p7b77"
                  }
              }
          },
          type: "state",
          native: {},
          acl: {
              object: 1636,
              state: 1636,
              owner: "system.user.admin",
              ownerGroup: "system.group.administrator"
          }
      };
      
      const id = "mqtt-client.0.buero_sofa.state.p7b77_Power_Sofalampe_Mitte";
      
      createState(id, datapoint.common, true, (err) => {
          if (err) {
              console.error(`Fehler beim Anlegen des Datenpunkts: ${err}`);
          } else {
              console.log(`Datenpunkt "${id}" erfolgreich angelegt.`);
          }
      });
      

      Ich erhalte auch nach dem starten die Ausgabe:

      javascript.0	12:11:15.701	info	script.js.common.openHasp_Datenpunkt_JS: Datenpunkt "mqtt-client.0.buero_sofa.state.p7b77_Power_Sofalampe_Mitte" erfolgreich angelegt.
      

      Aber leider ist kein derartiger datenpunkt zu sehen...!?! Hab auch oben auf "refresh" geklickt.

      9e4c47ad-3793-452a-9adf-642334021777-grafik.png
      Irgendwo ein Denkfehler drin?

      posted in Skripten / Logik
      oberfragger
      oberfragger
    • [gelöst] Generischen Datenpunkt via Blockly (openHasp)

      Hallo,

      ich bein gerade dabei ein openHasp-Display via ioBroker anzusprechen. Da funktioniert nur der MQTT-Client Adapter vernünftig.
      Man muss für jeden Button, Slider etc. 2 separate Datenpunkte mit MQTT-Verknüpfung manuell erstellen (1 mal subscribe und einmal publish). Das muss doch einfacher und fehlerfreier gehen. Zumal ich demnächst ein 2. Display einbinden muss.

      Ich dachte an ein Blockly, welchem ich die Variablem übergeben und ein Javascript erstellt mir das dann generisch. Hab schonmal gestartet, da tut sich aber nix. Könnt ihr mir bitte den Anstoss in die richtige Richtung geben?

      Mein vorhandenes Blockly (mit JS):

      var host_name, button_id, name2, adapter, type, role;
      
      // Beschreibe diese Funktion …
      async function createIoBrokerDataPoint() {
          function createIoBrokerDataPoint(adapter, button_id, name, type) {
              // Überprüfen, ob die notwendigen Parameter vorhanden sind
              if (!adapter || !button_id || !name || !type) {
                  console.error('Bitte alle Parameter übergeben: adapter, button_id, name, type.');
                  return;
              }
          
                      // Datenpunkt erstellen
                      const objDefinition = {
                          type: 'state',
                          common: {
                              name: name,
                              type: type,
                              role: 'state',
                              read: true,
                              write: true,
                          },
                          native: {},
                      };
          
                  }
          
          // Beispielaufruf der Funktion
          // Angenommen, "adapter" ist dein ioBroker-Adapter
          createIoBrokerDataPoint(adapter, button_id, name2, type);
      
      }
      
      
      host_name = '';
      button_id = 'p1b1';
      name2 = 'beschreibung';
      adapter = 'mqtt-client.0';
      type = 'string';
      role = '';
      
      on({ id: '0_userdata.0.create_openHasp_object' /* create_openHasp_object */, change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        if ((obj.state ? obj.state.val : '')) {
          setState('0_userdata.0.create_openHasp_object' /* create_openHasp_object */, false);
          await createIoBrokerDataPoint();
          console.info('createIoBrokerDataPoint');
        }
      });
      

      36705092-8db2-4dcb-8ce0-91569b8ad86f-grafik.png

      Der Datenpunkt soll dann später auch die MQTT-Sachen enthalten, automatisch. Hier ein Beispiel:

      {
        "common": {
          "name": "p7b46_Power_Sofalampe_Mitte",
          "desc": "Manuell erzeugt",
          "role": "state",
          "type": "string",
          "read": true,
          "write": true,
          "def": "",
          "custom": {
            "mqtt-client.0": {
              "enabled": true,
              "publish": false,
              "pubChangesOnly": false,
              "pubAsObject": false,
              "qos": false,
              "retain": false,
              "subscribe": true,
              "subChangesOnly": false,
              "subAsObject": false,
              "subQos": false,
              "setAck": false,
              "topic": "hasp/buero_sofa/state/p7b46"
            }
          }
        },
        "type": "state",
        "native": {},
        "_id": "mqtt-client.0.buero_sofa.state.p7b46_Power_Sofalampe_Mitte",
        "acl": {
          "object": 1636,
          "state": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        },
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1742849606787
      }
      

      p7b46 - ist der Button (button_id) des Displays und Teil des Topics.
      Sofalampe wäre hier Beispielsweise der Name.
      buero_sofa ist der hostname in diesem Fall.

      Wenn ich das schonmal hinbekomme, dann könnte ich relativ leicht auch den 2. Datenpunkt zum publishen gleich miterstellen...
      "topic": "hasp/buero_sofa/command/p7b46.val"

      posted in Skripten / Logik
      oberfragger
      oberfragger
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo