Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. Einfach mal zeigen will….. :-) - Teil 2

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    282

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Einfach mal zeigen will….. :-) - Teil 2

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
916 Posts 185 Posters 462.2k Views 68 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    vatoslocos
    wrote on last edited by
    #636

    Ok - probiere ich mal….

    Total spannend und dann doch einige Veränderungen zur 1.0 Version ;-)

    Wir zentralisiert du deine Views für die Bereiche ?

    Sprich EG/OG usw.:

    Ist ja kein direkter Verwes auf die Views: javascript.0.Eigene_Variablen.Vis.Umschalten_EG

    1 Reply Last reply
    0
    • L Online
      L Online
      lesiflo
      Most Active
      wrote on last edited by
      #637

      @vatoslocos:

      Ok - probiere ich mal….

      Total spannend und dann doch einige Veränderungen zur 1.0 Version ;-)

      Wir zentralisiert du deine Views für die Bereiche ?

      Sprich EG/OG usw.:

      Ist ja kein direkter Verwes auf die Views: javascript.0.Eigene_Variablen.Vis.Umschalten_EG `

      Das Zentralisieren mache ich manuell. Ich verändere die Werte für left und top solange bis es auf meinem 10"" Tablet passt. Anders geht's leider nicht. Es gibt im Material Design keine Funktion dafür. Aber wenn du das einmal für eine View erstellt hast kannst du es auf die anderen Views ja übertragen.

      V 1 Reply Last reply
      0
      • B Offline
        B Offline
        Buddinski88
        wrote on last edited by
        #638

        @lesiflo:

        So, nachdem nun alles fertig ist hier mal meine Grafiken.

        Läuft auf einem 10" Samsung Tablet und basiert auf dem Material Design von Uhula. Nochmal vielen Dank dafür. Tolle Arbeit !

        Bei einigen Geräten oder Anzeigen wie z.B. den Rollläden oder Fenstern gehen zusätzliche Dialoge zum Bedienen oder Anzeigen auf. `

        Hi Lesiflo,

        vielen vielen Dank fürs Bereitstellen deines Views :-)

        Ich bin gerade dabei diesen zu verstehen und komme soweit auch ganz gut damit klar.

        Was ich nicht verstehe ist, wie die bnag_eg z.B. arbeitet. Du hast eigene Variablen angelegt, soweit verstanden. Was ich nicht kapiere ist, was in den Variablen drin steht? Wärst du so freundliche und erklärst das mal?

        Vielen Dank und Grüße

        Bastian

        1 Reply Last reply
        0
        • T Offline
          T Offline
          tempestas
          wrote on last edited by
          #639

          Habe mal ein wenig an meiner Detailanzeige fürs Tageswetter gebastelt. Ich bin ja eher der optische Typ, für den es irgendwie (ja, Geschmacksache, das ist klar) eher fancy aussehen muss als 1 Trillion Infos auf möglichst wenig Platz zu quetschen.

          Vllt. gefällts ja jemandem..

          2395_entwurf.png

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Reply Last reply
          0
          • N Offline
            N Offline
            nousefor82
            wrote on last edited by
            #640

            HAMMER!!!

            :shock: :o :o :o :o

            1 Reply Last reply
            0
            • RummelmugR Offline
              RummelmugR Offline
              Rummelmug
              wrote on last edited by
              #641

              @tempestas:

              Habe mal ein wenig an meiner Detailanzeige fürs Tageswetter gebastelt. Ich bin ja eher der optische Typ, für den es irgendwie (ja, Geschmacksache, das ist klar) eher fancy aussehen muss als 1 Trillion Infos auf möglichst wenig Platz zu quetschen.

              Vllt. gefällts ja jemandem..

              filename="entwurf.png" index="0">~~ ` Sieht super aus. Ich mag es auch lieber fancy als total überladen.

              Gesendet von meinem ONEPLUS A5010 mit Tapatalk

              1 Reply Last reply
              0
              • thexbrainT Offline
                thexbrainT Offline
                thexbrain
                wrote on last edited by
                #642

                @tempestas:

                Habe mal ein wenig an meiner Detailanzeige fürs Tageswetter gebastelt. Ich bin ja eher der optische Typ, für den es irgendwie (ja, Geschmacksache, das ist klar) eher fancy aussehen muss als 1 Trillion Infos auf möglichst wenig Platz zu quetschen.

                Vllt. gefällts ja jemandem..

                entwurf.png `

                Sieht Hammer aus.

                Falls du es zur Verfügung stellst dann würde ich es nehmen ;)

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  tempestas
                  wrote on last edited by
                  #643

                  ich schaue die Tage mal, dass ich es einstelle.

                  Sind auch zwei Skripte dahinter, damit die Zeitanzeige passt und der Sonnenverlauf sich richtig positioniert (ja, auch wenns nur schematisch ist, ist mir klar :-)

                  <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                  1 Reply Last reply
                  0
                  • thexbrainT Offline
                    thexbrainT Offline
                    thexbrain
                    wrote on last edited by
                    #644

                    @tempestas:

                    ich schaue die Tage mal, dass ich es einstelle.

                    Sind auch zwei Skripte dahinter, damit die Zeitanzeige passt und der Sonnenverlauf sich richtig positioniert (ja, auch wenns nur schematisch ist, ist mir klar :-) `

                    Danke ;)

                    1 Reply Last reply
                    0
                    • D Offline
                      D Offline
                      dondaik
                      wrote on last edited by
                      #645

                      starkt gemacht !!!

                      wer Schreibfehler findet darf sie behalten … :-(

                      Ps: Anfänger im Bereich Tinkerboard + IOBROKER !

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        schittl
                        wrote on last edited by
                        #646

                        @tempestas:

                        Vllt. gefällts ja jemandem.. `
                        Feine Arbeit. Top!!

                        HW: Lenovo M920q (Proxmox, ioBroker, RaspMatic & Z2M), QNAP (Docker, Influx), Arduino Mega 2560 R3 (I2C DS18B20 + LED)

                        SW: CT IoBroker, VM RaspMatic(v3.79.6.20241122)

                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          tempestas
                          wrote on last edited by Jey Cee
                          #647

                          Die view hängt an diesem Beitrag als txt dran. Die beiden nachfolgenden Skripte müsst ihr dann noch nutzen.

                          Skript für die Uhrzeit in Minuten

                          createState("Zeitplanung.Uhrzeit.Minuten", 0);
                           schedule('*/1 * * * *', function TimeToMinutes() {
                              var a = new Date();
                              var h = a.getHours();
                              var m = a.getMinutes();
                          
                              var timeInMinutes= h*60+m;
                              setState("Zeitplanung.Uhrzeit.Minuten", timeInMinutes);
                          });
                          

                          Skript für den Sonnenverlauf

                          // Skript für den Sonnenverlauf in VIS, 
                          // tempestas 10.1.2019, v0.2
                           var debug = true;
                          var force = false;
                          var i = 0;
                           var xWidth = 735;       // Breite grafischer Horizont
                          var xOffset = 60;       // Abstand grafischer Horizont x-Achse vom linken Rand in px
                          var yOffset = 320;      // Abstand grafischer Horizont zur x-Achse vom oberen Rand in px
                           var idDayMinutes = "javascript.0.Zeitplanung.Uhrzeit.Minuten"/*Zeitplanung.Uhrzeit.Minuten*/;
                           var picHeight = 40; // Höhe der Bilder in px 
                          var picWidth = 40;
                           var idSunrise = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_in"/*sun raise*/;
                          var idSunhigh = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_mid";
                          var idSunset = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_out";
                           var cronString = "0 1 * * *";  
                           // initial states anlegen    
                          function create(){
                              for (i=1 ; i<25;i++) {
                                      createState("Sonnenstand.Stundenverlauf."+i+".Y", 0, force);
                                      createState("Sonnenstand.Stundenverlauf."+i+".X", 0, force);
                                      createState("Sonnenstand.Stundenverlauf."+i+".BildStatus", 0, force);
                                  }
                                      createState("Sonnenstand.Stundenverlauf.UhrzeitX", 0, force);
                          }
                           // States berechnen und bespielen
                          function graph(){
                          
                              var rise;
                              var noon;
                              var down;
                              var radius;
                              var y;
                              var x;
                              var count;
                              var stat;       // Für image 8; status 0 = kein bild, 1 = Sonnenaufgang, Status 2 = Sonne, Status 3 = Untergang
                              var radWinkel;
                                       
                              rise = parseInt(getState(idSunrise).val.substring(0,2) )* 60 + parseInt( getState(idSunrise).val.slice(3,5));
                              noon = parseInt(getState(idSunhigh).val.substring(0,2))* 60 + parseInt(getState(idSunhigh).val.slice(3,5)  );       
                              down = parseInt(getState(idSunset).val.substring(0,2)) * 60 + parseInt(getState(idSunset).val.slice(3,5)  );
                          
                              radius = Math.round((xWidth / 1440)  * (down - rise )/2) ;   // 1440 sind die Minuten des Tages
                          
                              count =  parseInt(getState(idSunset).val.substring(0,2)) - parseInt(getState(idSunrise).val.substring(0,2) )  +1; // für die Anzahl der Bilder
                               if(debug) log("count ist "+count);
                          
                              if(debug) log("sonnenaufgang zur Minute "+rise +", Sonnenhöchstand zur Minute "+noon + " , Sonnenuntergang zur Minute "+down +"; Der Radius beträgt "+radius +" Pixel");
                          
                              for (i=1 ; i<=count ;i++) {
                                  if(debug) log("Durchgang "+i);
                          
                                  var degrees = (180 / (count -1) * (count - i))  ;
                                  radWinkel = degrees * Math.PI/180; 
                                  
                                  x = Math.round(((Math.cos(radWinkel)* radius) + xOffset + noon/1440*xWidth)-picWidth/2) ;
                                  y = Math.round( yOffset - (Math.sin(radWinkel) * radius + picHeight));
                          
                                  if(debug) log("X ist "+x +" und Y ist "+y);
                          
                                  setState("Sonnenstand.Stundenverlauf."+i+".Y", y);
                                  setState("Sonnenstand.Stundenverlauf."+i+".X", x); 
                          
                                  if (i == 1) stat = 1;
                                  else if (i >1 && i < count) stat = 2;
                                  else if (i == count) stat = 3; 
                                  else stat = 0;
                                  if(debug) log("i ist "+i +" und stat ist "+stat);
                                  setState("Sonnenstand.Stundenverlauf."+i+".BildStatus", stat);
                                } 
                          }
                           //Zeitzeiger
                           on(idDayMinutes, function(obj){
                          
                           var pointerWidth = 24;
                           var val = Math.round(obj.state.val /1440 * xWidth + xOffset - pointerWidth / 2);
                           setState("Sonnenstand.Stundenverlauf.UhrzeitX", val);
                          
                          });
                          // Bei start
                          create();
                          setTimeout(graph, 1000);
                          //schedule
                          >schedule(cronString, graph);
                          

                          Hinweis:

                          ich nutze den dasWetter Adapter!
                          2395_wetterdetailed.txt

                          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                          1 Reply Last reply
                          0
                          • I Offline
                            I Offline
                            IOkev
                            wrote on last edited by
                            #648

                            Grüße, habe mal eine frage, wenn man für jedes Zimmer einen view hat, und einen Home view wo alle buttons drauf sind, so wie es eigentlich alle haben, wie komme ich dann imer zurück zur hauptseite? Macht ihr die Button auf Alle seiten auch oder wie ist das gelöst? Bin anfänger und blicke noch nicht so ganz durch. Danke MFG Kevin

                            1 Reply Last reply
                            0
                            • thexbrainT Offline
                              thexbrainT Offline
                              thexbrain
                              wrote on last edited by
                              #649

                              @tempestas:

                              Skript für die Uhrzeit in Minuten

                              ! ````
                              createState("Zeitplanung.Uhrzeit.Minuten", 0);
                              ! schedule('*/1 * * * *', function TimeToMinutes() {
                              var a = new Date();
                              var h = a.getHours();
                              var m = a.getMinutes();

                              var timeInMinutes= h*60+m;
                              setState("Zeitplanung.Uhrzeit.Minuten", timeInMinutes);
                              

                              });

                              ! ````

                              Skript für den Sonnenverlauf

                              ! ````
                              // Skript für den Sonnenverlauf in VIS,
                              // tempestas 10.1.2019, v0.2
                              ! var debug = true;
                              var force = false;
                              var i = 0;
                              ! var xWidth = 735; // Breite grafischer Horizont
                              var xOffset = 60; // Abstand grafischer Horizont x-Achse vom linken Rand in px
                              var yOffset = 320; // Abstand grafischer Horizont zur x-Achse vom oberen Rand in px
                              ! var idDayMinutes = "javascript.0.Zeitplanung.Uhrzeit.Minuten"/Zeitplanung.Uhrzeit.Minuten/;
                              ! var picHeight = 40; // Höhe der Bilder in px
                              var picWidth = 40;
                              ! var idSunrise = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_in"/sun raise/;
                              var idSunhigh = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_mid";
                              var idSunset = "daswetter.0.NextDaysDetailed.Location_1.Day_1.sun_out";
                              ! var cronString = "0 1 * * *";
                              ! // initial states anlegen
                              function create(){
                              for (i=1 ; i<25;i++) {
                              createState("Sonnenstand.Stundenverlauf."+i+".Y", 0, force);
                              createState("Sonnenstand.Stundenverlauf."+i+".X", 0, force);
                              createState("Sonnenstand.Stundenverlauf."+i+".BildStatus", 0, force);
                              }
                              createState("Sonnenstand.Stundenverlauf.UhrzeitX", 0, force);
                              }
                              ! // States berechnen und bespielen
                              function graph(){

                              var rise;
                              var noon;
                              var down;
                              var radius;
                              var y;
                              var x;
                              var count;
                              var stat;       // Für image 8; status 0 = kein bild, 1 = Sonnenaufgang, Status 2 = Sonne, Status 3 = Untergang
                              var radWinkel;
                              

                              !
                              rise = parseInt(getState(idSunrise).val.substring(0,2) )* 60 + parseInt( getState(idSunrise).val.slice(3,5));
                              noon = parseInt(getState(idSunhigh).val.substring(0,2))* 60 + parseInt(getState(idSunhigh).val.slice(3,5) );
                              down = parseInt(getState(idSunset).val.substring(0,2)) * 60 + parseInt(getState(idSunset).val.slice(3,5) );

                              radius = Math.round((xWidth / 1440)  * (down - rise )/2) ;   // 1440 sind die Minuten des Tages
                              
                              count =  parseInt(getState(idSunset).val.substring(0,2)) - parseInt(getState(idSunrise).val.substring(0,2) )  +1; // für die Anzahl der Bilder
                              

                              ! if(debug) log("count ist "+count);

                              if(debug) log("sonnenaufgang zur Minute "+rise +", Sonnenhöchstand zur Minute "+noon + " , Sonnenuntergang zur Minute "+down +"; Der Radius beträgt "+radius +" Pixel");
                              
                              for (i=1 ; i<=count ;i++) {
                                  if(debug) log("Durchgang "+i);
                                  
                                  var degrees = (180 / (count -1) * (count - i))  ;
                                  radWinkel = degrees * Math.PI/180; 
                              

                              !
                              x = Math.round(((Math.cos(radWinkel)* radius) + xOffset + noon/1440*xWidth)-picWidth/2) ;
                              y = Math.round( yOffset - (Math.sin(radWinkel) * radius + picHeight));

                                  if(debug) log("X ist "+x +" und Y ist "+y);
                                  
                                  setState("Sonnenstand.Stundenverlauf."+i+".Y", y);
                                  setState("Sonnenstand.Stundenverlauf."+i+".X", x); 
                                  
                                  if (i == 1) stat = 1;
                                  else if (i >1 && i < count) stat = 2;
                                  else if (i == count) stat = 3; 
                                  else stat = 0;
                                  if(debug) log("i ist "+i +" und stat ist "+stat);
                                  setState("Sonnenstand.Stundenverlauf."+i+".BildStatus", stat);
                                } 
                              

                              }

                              ! //Zeitzeiger
                              ! on(idDayMinutes, function(obj){

                              var pointerWidth = 24;
                              var val = Math.round(obj.state.val /1440 * xWidth + xOffset - pointerWidth / 2);
                              setState("Sonnenstand.Stundenverlauf.UhrzeitX", val);

                              });

                              ! // Bei start
                              ! create();
                              setTimeout(graph, 1000);
                              ! //schedule
                              ! schedule(cronString, graph);
                              ! ````
                              Hinweis:

                              ich nutze den dasWetter Adapter! `

                              Könntest du mir auch die View geben?

                              1 Reply Last reply
                              0
                              • T Offline
                                T Offline
                                tempestas
                                wrote on last edited by
                                #650

                                habe ich an den ersten Beitrag als txt angehängt, war zu groß für das Forum

                                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                1 Reply Last reply
                                0
                                • T Offline
                                  T Offline
                                  tempestas
                                  wrote on last edited by
                                  #651

                                  @IOkev:

                                  Grüße, habe mal eine frage, wenn man für jedes Zimmer einen view hat, und einen Home view wo alle buttons drauf sind, so wie es eigentlich alle haben, wie komme ich dann imer zurück zur hauptseite? Macht ihr die Button auf Alle seiten auch oder wie ist das gelöst? Bin anfänger und blicke noch nicht so ganz durch. Danke MFG Kevin `

                                  ja, entweder du nutzt ein Menü auf jeder Seite; dann ist es am einfachsten, du baust dir ein Menu als eigene view und legst auf jede deiner Seiten ein "view in widget". Dort kannst du dann einfach deine Menu-View auswählen und sie wird dann angezeigt. Auf die Art musst du nur im Menü 1x anpassen, wenn du etwas ändern willst.

                                  Oder du baust eine Seite auf der du navigierst und auf jede Subseite baust du dir einen "zurück" button.

                                  Oder, wenn du es ganz schlank haben willst baust du nur eine Hauptseite, auf der du dann mit Popups arbeitest, das geht auch.

                                  <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                  1 Reply Last reply
                                  0
                                  • NegaleinN Offline
                                    NegaleinN Offline
                                    Negalein
                                    Global Moderator
                                    wrote on last edited by
                                    #652

                                    @tempestas:

                                    auf der du dann mit Popups arbeitest, das geht auch. `

                                    wie funktioniert das mit den Popups?

                                    Hab das bis jetzt noch nicht herausgefunden.

                                    LG

                                    ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
                                    ° Node.js Fixer ---> iob nodejs-update
                                    ° Fixer ---> iob fix

                                    1 Reply Last reply
                                    0
                                    • thexbrainT Offline
                                      thexbrainT Offline
                                      thexbrain
                                      wrote on last edited by Jey Cee
                                      #653

                                      @tempestas:

                                      habe ich an den ersten Beitrag als txt angehängt, war zu groß für das Forum `

                                      ok thx.

                                      SIeht bei mir so aus. Das Hintergrundbild fehlt allerdings.

                                      Muss ich bei dem markierten was anwählen?
                                      4720_2222.jpg 4720_2223.jpg

                                      1 Reply Last reply
                                      0
                                      • sigi234S Online
                                        sigi234S Online
                                        sigi234
                                        Forum Testing Most Active
                                        wrote on last edited by
                                        #654

                                        Da müsste tempestas das Bild noch zur Verfügung stellen und du es dann mit den Dateimanager in dein Vis hochladen und dann verlinken.

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

                                        1 Reply Last reply
                                        0
                                        • T Offline
                                          T Offline
                                          tempestas
                                          wrote on last edited by
                                          #655

                                          Du kannst dir jedes Bild per Google suchen, dass du magst. Schau Mal nach sun space suchen.

                                          Das Bild ist halt klein und auch nicht in größer zu finden.

                                          Das schafft ihr schon selbst. 8-)

                                          Es fehlt noch etwas CSS für die glow Effekte. Kann ich nachreichen

                                          Beim markierten musst du nichts tun, das sind ja einfach nur Texte

                                          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          549

                                          Online

                                          32.7k

                                          Users

                                          82.5k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe