Navigation

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

    NEWS

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Profile
    • Following 0
    • Followers 0
    • Topics 51
    • Posts 932
    • Best 77
    • Groups 2

    Gargano

    @Gargano

    Pro

    94
    Reputation
    107
    Profile views
    932
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Gargano Follow
    Pro Starter

    Best posts made by Gargano

    • RE: [Erledigt] Keine Anzeige der Projekte in VisEdit

      @glasfaser Danke, scheint es gewesen zu sein. Setup von der Web Instanz sieht aber jetzt anders aus
      c6dc8677-52bf-43a8-9f08-7c16ee5cd711-image.png

      Checkbox Reine Web Sockets verwenden habe ich gesetzt, damit geht es jetzt.

      Mit Websocket sieht es so aus und geht auch

      bdf0ab96-0ac0-4627-8c7f-93ef18a25076-image.png

      posted in Error/Bug
      Gargano
      Gargano
    • Sektionen Shutter Control je nach Sonnenwinkel (Azimuth)

      Es gibt zwar den Adapter ShutterControl, der war mir aber für meine Zwecke nicht geeignet.
      Ich will je nach Sonnen-Azimuth verschiedene Sektoren vom Haus mit den Rollo abschatten.
      Für die Ermittlung der Sektionen gibt es www.sonnenverlauf.de.
      Man sucht sein Haus und verändert auf der Zeitachse dann die Position der Sonne. Dann die Anfangs und Endwerte des Azimuth notieren und in die Konstanten der Sektionen eintragen.

      Außerdem wird der Adapter Weatherunderground benötigt sowie suncalc.

      Um den Sonnenstand zuberechen :

      function today () {
          var d = new Date();
          return (formatDate(d, "TT.MM.JJJJ SS:mm:ss"));
      }
      
      function Sonnenstand_berechnen () {
          var now = new Date();
          var sunpos = suncalc.getPosition(now, lat, long);
          var h = sunpos.altitude * 180 / Math.PI;
          var a = sunpos.azimuth * 180 / Math.PI + 180;
          setState(idEle, Math.round(10 * h) / 10, true);
          setState(idAzi, Math.round(a), true);
          var heute = today(); // aktuelles Datum und aktuelle Zeit
          setState(idTime,heute);
      }
       
      schedule("* * * * *", Sonnenstand_berechnen); // jede Minute
      
      

      Shutter Control Script :
      Das Script verwendet eine Liste der Sektionen, in der Begin und Ende des Azimuth deklariert wird.
      Die Sektionenliste kann erweitert oder verkleinert werden, je nach Bedarf.

      Die Funktion ScheduleOneSection berechnet dann ob die Rollos runtergefahren werden :
      Wenn Temperatur größer als die Min Temperatur ist.
      Wenn die Sektion innerhalb der Grenzen liegt
      Wenn die Bewölkung in den nächsten 4 Stunden unter der definierten Mindestgrenze liegt.

      Rollo wieder rauf, wenn Sonnenstand außerhalb der Sektion oder Bewölkung über der max. Grenze.

      Wenn kein Aussentemperatur Sensor vorhanden ist, kann auch die Temperatur von der Wettervorhersage verwendet werden.

      Das Script bewegt die Rollo nur einmal, man kann also manuell auch die Rollo verdunkeln oder rauffahren.

      // Sonnenstand 
      // Ost = 100° bis 210°  (ca. 9:00 bis 14:00)
      // Süd = Dach 150° bis 270° (ca. 12:00 bis 18:00)
      //       Wand 180° bis 270° (ca. 13:00 bis 18:00)
      // schedule nach Sonnenstand Azimuth
      // wenn Ost, dann alle Rollos auf Ostseite runterfahren auf Abschattung
      // wenn Süd, dann alle Rollos auf Südseite runterfahren auf Abschattung
      // Sonnenstand wurde mit www.sonnenverlauf.de ermittelt
      
      // Script benötigt noch die Adapter Weatherunderground sowie suncalc
      
      const idAzi = 'javascript.0.Sonnenstand.Azimut';
      const AussenTemp = 'hm-rega.0.8536';
      
      
      const cAziOstBegin = 100;
      const cAziOstEnd = 210;
      const cAziSuedDachBegin = 150;
      const cAziSuedDachEnd = 270;
      const cAziSuedWandBegin = 180;
      const cAziSuedWandEnd = 270;
      
      
      const idOstActive = "SonnenRollo.Ost.Active";
      const idOstEnabled = "SonnenRollo.Ost.Enabled";
      const idOstBeginAzi = "SonnenRollo.Ost.BeginAzi";
      const idOstEndAzi = "SonnenRollo.Ost.MaxAzi";
      const idSuedDachActive = "SonnenRollo.Sued.Dach.Active";
      const idSuedDachEnabled = "SonnenRollo.Sued.Dach.Enabled";
      const idSuedDachBeginAzi = "SonnenRollo.Sued.Dach.BeginAzi";
      const idSuedDachEndAzi = "SonnenRollo.Sued.Dach.EndAzi";
      const idSuedWandActive = "SonnenRollo.Sued.Wand.Active";
      const idSuedWandEnabled = "SonnenRollo.Sued.Wand.Enabled";
      const idSuedWandBeginAzi = "SonnenRollo.Sued.Wand.BeginAzi";
      const idSuedWandEndAzi = "SonnenRollo.Sued.Wand.EndAzi";
      const idCloudp = "SonnenRollo.Cloudp";
      const idMaxCloudp = "SonnenRollo.MaxCloudp";
      const idAussenTempMin = "SonnenRollo.MinAussenTemp";
      
      const cAussenTempMin = 20.0;
      const cMaxCloudp = 30;
      
      const idCloud0h = 'weatherunderground.0.forecastHourly.0h.sky';
      const idCloud1h = 'weatherunderground.0.forecastHourly.1h.sky';
      const idCloud2h = 'weatherunderground.0.forecastHourly.2h.sky';
      const idCloud3h = 'weatherunderground.0.forecastHourly.3h.sky';
      
      const creatStateList = [
          {name :idOstEnabled, initial:false, type:"boolean", role : "value"},
          {name :idOstActive, initial:false, type:"boolean", role : "value"},
          {name :idOstBeginAzi, initial:cAziOstBegin, type:"number", role : "value"},
          {name :idOstEndAzi, initial:cAziOstEnd, type:"number", role : "value"},
          {name :idSuedDachEnabled, initial:false, type:"boolean", role : "value"},
          {name :idSuedDachActive, initial:false, type:"boolean", role : "value"},
          {name :idSuedDachBeginAzi, initial:cAziSuedDachBegin, type:"number", role : "value"},
          {name :idSuedDachEndAzi, initial:cAziSuedDachEnd, type:"number", role : "value"},
          {name :idSuedWandEnabled, initial:false, type:"boolean", role : "value"},
          {name :idSuedWandActive, initial:false, type:"boolean", role : "value"},
          {name :idSuedWandBeginAzi, initial:cAziSuedWandBegin, type:"number", role : "value"},
          {name :idSuedWandEndAzi, initial:cAziSuedWandEnd, type:"number", role : "value"},
          {name :idCloudp, initial:0, type:"number", role : "value"},
          {name :idMaxCloudp, initial:cMaxCloudp, type:"number", role : "value"},
          {name :idAussenTempMin, initial:cAussenTempMin, type:"number", role : "value"},
      ]
      
      creatStateList.forEach (function(item) {
          createState(item.name, item.initial, { 
              type: item.type,
              min: 0,
              def: 0,
              role: item.role
          });
      });
      
      
      // Liste aller Rollos in den Sektionen
      // Ost
      const idRolloWohn1 = 'hm-rpc.0.HEQ0226186.1.LEVEL';
      const idRolloWohn2 = 'hm-rpc.0.HEQ0226973.1.LEVEL';
      const idRolloTuerGast = 'hm-rpc.1.LEQ0474520.3.LEVEL';
      const idRolloTuerBibliothek = 'hm-rpc.1.LEQ0474515.3.LEVEL';
      
      const OstRolloRunterList = [
          {name :idRolloWohn1, value:65},
          {name :idRolloWohn2,  value:65},
          {name :idRolloTuerGast,  value:65},
          {name :idRolloTuerBibliothek,  value:47}
      ]
      
      const OstRolloRaufList = [
          {name :idRolloWohn1, value:100},
          {name :idRolloWohn2,  value:100},
          {name :idRolloTuerGast,  value:100},
          {name :idRolloTuerBibliothek,  value:100}
      ]
      
      // Sued
      // Dach
      const idRolloDFFBibliothek = 'hm-rpc.1.EEQ0049007.3.LEVEL';
      const idRolloDFFBibliothekState = 'hm-rpc.0.LEQ0173556.1.STATE';
      const idRolloDFFWernerBuero = 'hm-rpc.1.EEQ0048996.3.LEVEL';
      const idRolloDFFWernerBueroState = 'hm-rpc.0.LEQ0174059.1.STATE';
      const idRolloDFFAngelikaBuero = 'hm-rpc.1.EEQ0048971.3.LEVEL';
      const idRolloDFFAngelikaBueroState = 'hm-rpc.0.LEQ0173973.1.STATE';
      
      const SuedDachRolloRunterList = [
          {name :idRolloDFFBibliothek, value:30, state:idRolloDFFBibliothekState},
          {name :idRolloDFFWernerBuero,  value:30, state:idRolloDFFWernerBueroState},
          {name :idRolloDFFAngelikaBuero,  value:30, state:idRolloDFFAngelikaBueroState}
      ]
      
      const SuedDachRolloRaufList = [
          {name :idRolloDFFBibliothek, value:100, state:idRolloDFFBibliothekState},
          {name :idRolloDFFWernerBuero,  value:100, state:idRolloDFFWernerBueroState},
          {name :idRolloDFFAngelikaBuero,  value:100, state:idRolloDFFAngelikaBueroState}
      
      ]
      
      
      // Wand
      
      const idRolloKueche = 'hm-rpc.0.IEQ0018796.1.LEVEL';
      const idRolloSchlaf = 'hm-rpc.0.HEQ0226866.1.LEVEL';
      
      const SuedWandRolloRunterList = [
          {name :idRolloKueche, value:40},
          {name :idRolloSchlaf,  value:25}
      ]
      
      const SuedWandRolloRaufList = [
          {name :idRolloKueche, value:100},
          {name :idRolloSchlaf,  value:100}
      ]
      
      // Rollo bewegen, je nach ActionList
      // Bei Kipp-Fenster wird der Fenstersensor ausgewertet (wenn state vorhanden) ->
      // keine Bewegung wenn Fenster offen
      function RolloAction (ActionList) {
          ActionList.forEach (function(item) {
              let doIt = true;
              if (item.state) {
                  doIt = !getState(item.state).val;
              }
              if (doIt==true) setState (item.name,item.value);
          });
      };
      
      // Mittelwert der Bewölkung für die nächsten 4 Stunden
      function getCloudPercent() {
          let c = getState (idCloud0h).val+getState (idCloud1h).val+getState (idCloud2h).val+getState (idCloud3h).val;
          c /=4;
          return (c);
      }
      
      
      const SectionList = [
          {name:'Ost',Enabled:idOstEnabled,Active:idOstActive,RolloRunterList:OstRolloRunterList,
           RolloRaufList:OstRolloRaufList,AziBegin:idOstBeginAzi,AziEnd:idOstEndAzi},
          {name:'SuedDach',Enabled:idSuedDachEnabled,Active:idSuedDachActive,RolloRunterList:SuedDachRolloRunterList,
           RolloRaufList:SuedDachRolloRaufList,AziBegin:idSuedDachBeginAzi,AziEnd:idSuedDachEndAzi},
          {name:'SuedWand',Enabled:idSuedWandEnabled,Active:idSuedWandActive,RolloRunterList:SuedWandRolloRunterList,
           RolloRaufList:SuedWandRolloRaufList,AziBegin:idSuedWandBeginAzi,AziEnd:idSuedWandEndAzi}
      ];
      
      function ScheduleOneSection(ThisSection) {
          let Azi=getState (idAzi).val;
          let Temp=getState (AussenTemp).val;
          let cloudp = getCloudPercent();
          let maxCloudp = getState (idMaxCloudp).val;
          let AussenTempMin = getState (idAussenTempMin).val;
          let AziBegin =getState(ThisSection.AziBegin).val;
          let AziEnd =getState(ThisSection.AziEnd).val;
          let Enabled = getState (ThisSection.Enabled).val;
          
          setState (idCloudp,cloudp);
          let Active=getState (ThisSection.Active).val;
          
          if (Enabled) {
              if ((Azi>=AziBegin) && (Azi<AziEnd)) 
              {
                  if (cloudp<maxCloudp) {
                      if ((Temp>=AussenTempMin) && (Active == false)) {
                          Active = true;
                          setState(ThisSection.Active,Active);
                          // Rollo runter
                          RolloAction(ThisSection.RolloRunterList);
                      }   
                  }
              }
              if (Active==true) {
                  if ((Azi>AziEnd) || (cloudp>maxCloudp)) {
                      // Rollo rauf
                      Active = false;
                      setState(ThisSection.Active,Active);
                      RolloAction(ThisSection.RolloRaufList);
                  }   
              }
          }
      
      }
      
      function ScheduleAllSections() {
          SectionList.forEach (function(item) {
              ScheduleOneSection(item);
          });
      }
      
      on({id: idAzi , change:'ne'}, function (obj) {
          ScheduleAllSections();
      });
      
      
      

      Hier kann ich die einzelnen Sektionen enablen/disablen

      fa2d1fb0-a734-4fe5-8ae9-29a9466d4382-grafik.png

      posted in Praktische Anwendungen (Showcase)
      Gargano
      Gargano
    • RE: VIS Verbindungsfehler [gelöst]

      @haselchen Ich habe ein Issue erstellt unter :

      https://github.com/ioBroker/ioBroker.ws/issues/14#issuecomment-1182780282

      Apollon77 hat dies gestern als Bug gekennzeichnet.

      SurfGargano created this issue in ioBroker/ioBroker.ws

      open WS Socket und Vis App #14

      posted in Visualisierung
      Gargano
      Gargano
    • RE: [gelöst] Admin ist sehr langsam mit Chrome

      hab gerade gesehen , es gab am
      Tuesday, February 18, 2025

      ein Update für Chrome , stable Channel. Version 133.0.6943.126

      Das würde auch zeitlich hinkommen.

      Chrome auf Android Handy geht auch einwandfrei.

      [EDIT] Chrome ist auf 133.0.6943.127 upgedatet worden. Jetzt geht es wieder schnell !
      Also erledigt.

      posted in ioBroker Allgemein
      Gargano
      Gargano
    • Neu entwickelter Heizungs-Controller für ELV HmIP-VDMot

      Hier stelle ich euch einen neu entwickelten Heizungs-Controller vor.

      Dieser Controller kann bis zu 12 HmIP-VDMot (ELV) Heizungssteller ansteuern.
      Dies sind Motoren, keine thermo-elektrische Ventile.
      Vorteil: wenig Stromverbrauch, da nur dann Strom benötigt wird, wenn sich der Motor bewegt.

      Wer basteln mag : es können auch Eqiva_Modell_N verwendet werden, dann müssen die Kabel aber verlötet werden.
      Die Platine hat die Westernbuchsen, die direkt für HmIP-VDMot passen.

      Das Design verwendet ein back EMF circuit, um die Umdrehungen des Motors zu zählen.
      Dadurch wird eine genaue Stellposition erreicht, im Gegensatz zu einer Zeitmessung.

      Ausserdem sind bis zu 35 1-Wire Temperatur Sensoren (DS18B20) anschließbar.
      Zwei Sensoren können jeweils einem Ventil zugeordnet werden (je nach dem Anwendungsfall) ,
      die anderen sind frei verfügbar. also max. 35 frei verfügbare Sensoren.

      Der Controller besteht aus einem WTH-32 Modul (LAN und WLAN, Autodetect) für die UI und einem STM32 Blackpill für
      die Hardware-Ansteuerung. Die Platine passt in das Hutschienen Leergehäuse APRA DB9 OBK.

      Das Modul kann sowohl für Fussboden-Heizung , wie auch für Radiatoren verwendet werden.

      Gesteuert kann das Ganze über MQTT oder JSON - Api.
      Wer es ganz rudimentär mag, der STM32 kann auch über serielle Schnittstelle gesteuert werden, ohne WTH-32.
      Dann entfallen aber die meisten Einstellmöglichkeiten.

      Software Update vom WTH-32 und STM32 wird über die Website des WTH-32 gemacht.

      Entwickelt hat es Lenti84 (Hardware und Software für den STM32) und ich (Software für WTH-32 und die UI)

      Weitere Infos unter :
      https://github.com/Lenti84/VdMot_Controller
      (Branch developer)

      Hardware Modul:
      assembly_done.jpg

      Hier zwei Webseiten, es gibt noch die Home, Network, About, WTH-32 Update und STM32 Update

      Statusseite :

      status_page.png

      Konfiguration:

      config.png

      Anleitung zur Installation :
      https://github.com/Lenti84/VdMot_Controller/wiki/FAQ#installation

      Telegram Chat Gruppe auf :
      https://t.me/+P0_VMEDQ8NMzZTUy

      <15.3.2025>
      Neue Version : Es gibt für den WTH und für den STM eine neue Version V1.4.10 (WTH). Der STM bleibt bei 1.4.9
      Ihr könnt Euch die neue Versionen von meinem Git runterladen :
      https://github.com/SurfGargano/VdMot_Controller/releases/latest
      (Unter Assets einfach auf die Files klicken, dann werden diese in den Download Ordner runtergeladen)

      814625ec-7b7c-4c72-a997-e7d5b7b7a14c-image.png

      Änderungen :

      Added

      Webui : Show information if stm failed
      PI Control : deadband added

      Fixed

      Mqtt : reconnect mqtt if control setup is saved to subscribe topics again
      SNTP : connection improved

      posted in Praktische Anwendungen (Showcase)
      Gargano
      Gargano
    • RE: [GELÖST] Hintergrundfarbe abhängig vom Wert ändern

      @andreas-kerzel Bin grad drüber gestolpert, weil ich das auch brauchte. Im Editor bleibt es immer grün, jedoch in der Vis Anzeige ist es dann richtig

      posted in Visualisierung
      Gargano
      Gargano
    • RE: SONOFF NSPanel mit Lovelace UI

      @xelarep Starte mal die js-Instanz neu unter Instanzen

      posted in Hardware
      Gargano
      Gargano
    • RE: Bambulab 3d-Drucker adapter

      @mick70 Wer mag , kann in Zeile 127 vom main.js den error log in warn ändern.

      this.log.error(`Connection issue occurred ${error}`);
      
      this.log.warn(`Connection issue occurred ${error}`);
      

      Die Datei befindet sich hier :

      /opt/iobroker/node_modules/iobroker.bambulab
      

      Dann die Log Stufe auf error stellen . Fehlermeldungen kommen dann immer noch durch aber nicht mehr Connection Fehler.

      Ich habe mal dazu ein Issue erstellt.

      posted in Tester
      Gargano
      Gargano
    • RE: SONOFF NSPanel mit Lovelace UI

      @jayjojayson Mein Lieblingsthema : Javascript Adapter wird immer restriktiver und was früher durchging, wirft jetzt einen Fehler. Bitte auf die neueste Version vom NSPanel mit Lovelace UI updaten.

      posted in Hardware
      Gargano
      Gargano
    • RE: Adapter: broadlink2

      @ahnungsbefreit Du musst es anlernen. Dazu den _Learn Datenpunkt auf true setzen und dann an der Fernbedienung die entsprechenden Tasten drücken , die Du haben willst.
      908a7bde-0c0a-484f-a077-6d6c50f4dc3b-grafik.png
      Unter dem Datenpunkt "L" erscheinen dann die Codes.
      Setzen dieser Codes schickt dann der Broadlink das Telegramm

      posted in Entwicklung
      Gargano
      Gargano

    Latest posts made by Gargano

    • RE: Adapter Hyundai (Bluelink) oder KIA (UVO)

      @meister-mopper sagte in Adapter Hyundai (Bluelink) oder KIA (UVO):

      Haste mal das Prozedere erneut durchgeführt und einen neuen refresh token geholt?

      Hab die komplette Prozedur wiederholt und jetzt gehts. Mal schauen wie lange.

      [Edit]
      Hat nicht lange gehalten, heute wieder derselbe Fehler, Login nicht möglich.
      Ich habs jetzt deaktiviert. Evtl. gibt es ja mal eine dauerhafte Lösung.

      posted in Tester
      Gargano
      Gargano
    • RE: TibberLink Adapter

      @libertyx82 sagte in TibberLink Adapter:

      Da es das Argument vorher nicht gab, nutzt es der Adapter auch nicht, daher kannst du es im Adapter auch nicht einstellen

      Der Changelog von Tibber, in dem die Änderung beschrieben ist, ist vom Datum 1.9.2025
      Die letzte Version von Tibberlink ist 4 Tage alt. Da hätte es ja sein können, daß die Änderung schon eingeflossen ist.

      posted in ioBroker Allgemein
      Gargano
      Gargano
    • RE: TibberLink Adapter

      The Subscription.priceInfo field (i.e. the type PriceInfo) now takes an optional argument resolution that can either be HOURLY or QUARTER_HOURLY.

      Default ist Hourly.

      Es müsste im Adapter einzustellen sein , habe aber diesbezüglich nichts gesehen.

      posted in ioBroker Allgemein
      Gargano
      Gargano
    • RE: Adapter Hyundai (Bluelink) oder KIA (UVO)

      @arteck sagte in Adapter Hyundai (Bluelink) oder KIA (UVO):

      geht es den mit neuen Token

      Weder mit dem bisherigen Token, noch mit einem neu generierten.
      Ich wollte auch nicht nerven, sondern nur Bescheid geben.

      posted in Tester
      Gargano
      Gargano
    • RE: Adapter Hyundai (Bluelink) oder KIA (UVO)

      @arteck Der Workaround hat jetzt 5 Tage funktioniert und jetzt wieder der Fehler mit Login. Hat Kia wieder etwas verändert ?

      posted in Tester
      Gargano
      Gargano
    • RE: Adapter Hyundai (Bluelink) oder KIA (UVO)

      @arteck sagte in Adapter Hyundai (Bluelink) oder KIA (UVO):

      mit bissel glück läuft der dann auch

      Danke , hat funktioniert ; Kia Sportage PHEV

      posted in Tester
      Gargano
      Gargano
    • RE: Unbekannter Widget-Typ bei Verwendung der Free-Cloud

      @homoran sagte in Unbekannter Widget-Typ bei Verwendung der Free-Cloud:

      sind die widgets im stable?

      Im latest, weil die sonst mit der App nicht funktionieren. Da kommt dann in der App die Meldung unbekannter Widget Typ.

      posted in Cloud Dienste
      Gargano
      Gargano
    • Unbekannter Widget-Typ bei Verwendung der Free-Cloud

      Hi,

      wie verhält sich das, wenn in der Free-Cloud in der VIS-2 Anzeige die Meldung steht :
      Unbekannter Widget-Typ „tplEchartsChart“
      oder
      Unbekannter Widget-Typ „tplOpenWeatherMapWeather“

      Ist das ein Problem des Widgets oder ist der Typ noch nicht in die Cloud eingebunden ?

      Die E-Charts gibt es ja schon länger...

      Viele Grüße

      posted in Cloud Dienste
      Gargano
      Gargano
    • RE: Easee Wallbox mit iobroker

      @denjo sorry, der pv control Adapter ist 3 Jahre alt.

      posted in ioBroker Allgemein
      Gargano
      Gargano
    • RE: Easee Wallbox mit iobroker

      @denjo dann schau Dir lieber evcc an.

      posted in ioBroker Allgemein
      Gargano
      Gargano
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo