Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Visualisierung mit Node Red erstellen

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    210

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Visualisierung mit Node Red erstellen

Visualisierung mit Node Red erstellen

Scheduled Pinned Locked Moved Visualisierung
4.8k Posts 4 Posters 2.5m Views 4 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.
  • mickymM mickym

    @damrak2022 Wieso das sieht doch nicht anders aus. Ich hab nur selbst einen Datensatz eingefügt. Wie gesagt mach die iobroker-IN Nodes noch an die Chart Node und die DB Abfrage initialisierst Du einmal am Anfang mit einer Inject node.

    Du kannst ja die Zeit unten anders formatieren.

    Damrak2022D Offline
    Damrak2022D Offline
    Damrak2022
    wrote on last edited by
    #3168

    @mickym Vielleicht sollte ich mal was lernen: Ich bekomme die für das Gewicht die Change Node (create objects array ) nicht hin.

    Mit besten Grüßen
    Andy

    mickymM 1 Reply Last reply
    0
    • Damrak2022D Damrak2022

      @mickym Vielleicht sollte ich mal was lernen: Ich bekomme die für das Gewicht die Change Node (create objects array ) nicht hin.

      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      wrote on last edited by
      #3169

      @damrak2022 sagte in Visualisierung mit Node Red erstellen:

      @mickym Vielleicht sollte ich mal was lernen: Ich bekomme die für das Gewicht die Change Node (create objects array ) nicht hin.

      Dem kann ich nur zustimmen. 😉

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      Damrak2022D 2 Replies Last reply
      0
      • mickymM mickym

        @damrak2022 sagte in Visualisierung mit Node Red erstellen:

        @mickym Vielleicht sollte ich mal was lernen: Ich bekomme die für das Gewicht die Change Node (create objects array ) nicht hin.

        Dem kann ich nur zustimmen. 😉

        Damrak2022D Offline
        Damrak2022D Offline
        Damrak2022
        wrote on last edited by
        #3170

        @mickym Toll😄

        Mit besten Grüßen
        Andy

        1 Reply Last reply
        0
        • mickymM mickym

          @damrak2022 sagte in Visualisierung mit Node Red erstellen:

          @mickym Vielleicht sollte ich mal was lernen: Ich bekomme die für das Gewicht die Change Node (create objects array ) nicht hin.

          Dem kann ich nur zustimmen. 😉

          Damrak2022D Offline
          Damrak2022D Offline
          Damrak2022
          wrote on last edited by
          #3171

          @mickym Ich habe versucht das aus der bestehenden Change Node zu kopieren und alles auf Gewicht abzuändern und das was nicht benötig wird entfernt, aber der Trick hat nicht funktioniert.

          Mit besten Grüßen
          Andy

          mickymM 1 Reply Last reply
          0
          • Damrak2022D Damrak2022

            @mickym Ich habe versucht das aus der bestehenden Change Node zu kopieren und alles auf Gewicht abzuändern und das was nicht benötig wird entfernt, aber der Trick hat nicht funktioniert.

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            wrote on last edited by
            #3172

            @damrak2022 Na ich denke, dass der Trick prinzipiell schon funktioniert. Würde ich ja genauso machen, aber vielleicht hast Du ja zuviel oder zuwenig entfernt. 😉 - Der erste Satz ist ja nicht so schlecht und vielleicht solltest Du anfangen, das zu verstehen. 😉 Sind alles nur Objekte und Arrays. Und Du weisst ja wie diese definiert sind. Habe ich eigentlich schon lange nicht mehr gefragt. 😁

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            Damrak2022D 1 Reply Last reply
            0
            • mickymM mickym

              @damrak2022 Na ich denke, dass der Trick prinzipiell schon funktioniert. Würde ich ja genauso machen, aber vielleicht hast Du ja zuviel oder zuwenig entfernt. 😉 - Der erste Satz ist ja nicht so schlecht und vielleicht solltest Du anfangen, das zu verstehen. 😉 Sind alles nur Objekte und Arrays. Und Du weisst ja wie diese definiert sind. Habe ich eigentlich schon lange nicht mehr gefragt. 😁

              Damrak2022D Offline
              Damrak2022D Offline
              Damrak2022
              wrote on last edited by
              #3173

              @mickym Bitte sehr:

              Also ein ARRAY beginnt IMMER mit einer ECKIGEN Klammer und schließt mit einer ECKIGEN Klammer ab und die einzelnen Elemente werden durch ein Komma getrennt.

              Mit besten Grüßen
              Andy

              mickymM 1 Reply Last reply
              0
              • Damrak2022D Damrak2022

                @mickym Bitte sehr:

                Also ein ARRAY beginnt IMMER mit einer ECKIGEN Klammer und schließt mit einer ECKIGEN Klammer ab und die einzelnen Elemente werden durch ein Komma getrennt.

                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                wrote on last edited by
                #3174

                @damrak2022 Na und was hast Du in Deinem Array für Elemente?

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                Damrak2022D 1 Reply Last reply
                0
                • mickymM mickym

                  @damrak2022 Na und was hast Du in Deinem Array für Elemente?

                  Damrak2022D Offline
                  Damrak2022D Offline
                  Damrak2022
                  wrote on last edited by
                  #3175

                  @mickym value, measurement start und stopzeit, sowie table

                  Mit besten Grüßen
                  Andy

                  mickymM 2 Replies Last reply
                  0
                  • Damrak2022D Damrak2022

                    @mickym value, measurement start und stopzeit, sowie table

                    mickymM Offline
                    mickymM Offline
                    mickym
                    Most Active
                    wrote on last edited by
                    #3176

                    @damrak2022 Nein - in Deinem Array ist jedes Element, was aus der Influx-DB rauskommt ein Datensatz und jeder Datensatz und somit jedes Element ist ein Objekt. Wie ist denn nun ein Objekt definiert?

                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                    Damrak2022D 1 Reply Last reply
                    0
                    • mickymM mickym

                      @damrak2022 Nein - in Deinem Array ist jedes Element, was aus der Influx-DB rauskommt ein Datensatz und jeder Datensatz und somit jedes Element ist ein Objekt. Wie ist denn nun ein Objekt definiert?

                      Damrak2022D Offline
                      Damrak2022D Offline
                      Damrak2022
                      wrote on last edited by
                      #3177

                      @mickym Mit einer geschweiften Klammer und durch Komma getrennt

                      Mit besten Grüßen
                      Andy

                      mickymM 1 Reply Last reply
                      0
                      • Damrak2022D Damrak2022

                        @mickym Mit einer geschweiften Klammer und durch Komma getrennt

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        wrote on last edited by
                        #3178

                        @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                        @mickym Mit einer geschweiften Klammer und durch Komma getrennt

                        Was ist durch ein Komma getrennt?

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        Damrak2022D 1 Reply Last reply
                        0
                        • mickymM mickym

                          @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                          @mickym Mit einer geschweiften Klammer und durch Komma getrennt

                          Was ist durch ein Komma getrennt?

                          Damrak2022D Offline
                          Damrak2022D Offline
                          Damrak2022
                          wrote on last edited by Damrak2022
                          #3179

                          @mickym die unterschiedlichen Eigenschaften, falls vorhanden

                          Beispiel:

                          Objekt: Mercedes
                          Eigenschaften: (Klimaanlage, Sitzheizung)

                          Mit besten Grüßen
                          Andy

                          1 Reply Last reply
                          0
                          • Damrak2022D Damrak2022

                            @mickym value, measurement start und stopzeit, sowie table

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            wrote on last edited by mickym
                            #3180

                            @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                            @mickym value, measurement start und stopzeit, sowie table

                            Was ist das also?

                            Also Eigenschaften - wie sieht denn nun das Ergebnis Deiner Abfrage aus?

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            Damrak2022D 1 Reply Last reply
                            0
                            • mickymM mickym

                              @damrak2022 sagte in Visualisierung mit Node Red erstellen:

                              @mickym value, measurement start und stopzeit, sowie table

                              Was ist das also?

                              Also Eigenschaften - wie sieht denn nun das Ergebnis Deiner Abfrage aus?

                              Damrak2022D Offline
                              Damrak2022D Offline
                              Damrak2022
                              wrote on last edited by
                              #3181

                              @mickym Sorry, bin mir unsicher

                              Mit besten Grüßen
                              Andy

                              mickymM 1 Reply Last reply
                              0
                              • Damrak2022D Damrak2022

                                @mickym Sorry, bin mir unsicher

                                mickymM Offline
                                mickymM Offline
                                mickym
                                Most Active
                                wrote on last edited by
                                #3182

                                @damrak2022 Also ich hab Dir doch in dem Flow eine debug Node gemacht vor der Change Node - also mit dem Inhalt Deiner Abfrage und dann eine debug Node mit dem Inhalt wie das Array aussieht was in die Chart Node geht. Dann schau Dir halt beides an. Und mach das Gleiche mit Deiner neuen Abfrage.

                                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                Damrak2022D 2 Replies Last reply
                                0
                                • mickymM mickym

                                  @damrak2022 Also ich hab Dir doch in dem Flow eine debug Node gemacht vor der Change Node - also mit dem Inhalt Deiner Abfrage und dann eine debug Node mit dem Inhalt wie das Array aussieht was in die Chart Node geht. Dann schau Dir halt beides an. Und mach das Gleiche mit Deiner neuen Abfrage.

                                  Damrak2022D Offline
                                  Damrak2022D Offline
                                  Damrak2022
                                  wrote on last edited by
                                  #3183

                                  @mickym Ja, bin gerade dabei.

                                  Mit besten Grüßen
                                  Andy

                                  Damrak2022D 1 Reply Last reply
                                  0
                                  • Damrak2022D Damrak2022

                                    @mickym Ja, bin gerade dabei.

                                    Damrak2022D Offline
                                    Damrak2022D Offline
                                    Damrak2022
                                    wrote on last edited by
                                    #3184

                                    @damrak2022

                                    Hallo Micky,
                                    Nachdem ich es irgendwie nicht wirklich begreife, schreibe ich Dir hier mal was ich nicht kapiere: Wenn ich mir das Ergebnis aus dieser Abfrage anschaue:

                                    Bildschirm­foto 2023-01-27 um 07.34.41.png

                                    bekomme ich diese Ausgabe:

                                    [{"series":["Systole","Diastole","Puls"],"data":[[{"x":1674453025342,"y":127},{"x":1674454046390,"y":114},{"x":1674544046439,"y":114},{"x":1674544946521,"y":107}],[{"x":1674453055302,"y":84},{"x":1674454046390,"y":78},{"x":1674544046438,"y":78},{"x":1674544946520,"y":71}],[{"x":1674453088093,"y":114},{"x":1674454046392,"y":106},{"x":1674544046442,"y":106},{"x":1674544946521,"y":85}]],"labels":["Systole","Diastole","Puls"]}]
                                    

                                    Wenn ich das abfrage:
                                    Bildschirm­foto 2023-01-27 um 07.38.15.png

                                    bekomme ich diese Ausgabe:

                                    [{"result":"_result","table":0,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T05:50:55.302Z","_value":84,"_field":"value","_measurement":"Diastole"},{"result":"_result","table":0,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T06:07:26.39Z","_value":78,"_field":"value","_measurement":"Diastole"},{"result":"_result","table":0,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:07:26.438Z","_value":78,"_field":"value","_measurement":"Diastole"},{"result":"_result","table":0,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:22:26.52Z","_value":71,"_field":"value","_measurement":"Diastole"},{"result":"_result","table":1,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T05:51:28.093Z","_value":114,"_field":"value","_measurement":"Puls"},{"result":"_result","table":1,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T06:07:26.392Z","_value":106,"_field":"value","_measurement":"Puls"},{"result":"_result","table":1,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:07:26.442Z","_value":106,"_field":"value","_measurement":"Puls"},{"result":"_result","table":1,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:22:26.521Z","_value":85,"_field":"value","_measurement":"Puls"},{"result":"_result","table":2,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T05:50:25.342Z","_value":127,"_field":"value","_measurement":"Systole"},{"result":"_result","table":2,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-23T06:07:26.39Z","_value":114,"_field":"value","_measurement":"Systole"},{"result":"_result","table":2,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:07:26.439Z","_value":114,"_field":"value","_measurement":"Systole"},{"result":"_result","table":2,"_start":"2023-01-19T00:35:58.94679632Z","_stop":"2023-01-26T00:35:58.94679632Z","_time":"2023-01-24T07:22:26.521Z","_value":107,"_field":"value","_measurement":"Systole"}]
                                    

                                    Okay, mir ist eines zumindest klar:
                                    Der X Wert stellt die Unix Time dar, welchen Du mit $toMillis(_time) in das akutelle Datum/Uhrzeit umrechnest.
                                    Der Y Wert stellt den Weg der Messung dar.
                                    In beiden Debug Ausgaben von Dir wird ein Array ausgegeben.
                                    Wenn ich nun erstmal meine direkte Abfrage über diesen Flow mache:
                                    Bildschirm­foto 2023-01-27 um 07.40.21.png

                                    bekomme ich diese Ausgabe:

                                    [{"result":"_result","table":0,"_start":"2022-12-28T06:40:27.840084988Z","_stop":"2023-01-27T06:40:27.840084988Z","_time":"2023-01-24T03:32:27.457Z","_value":120.244,"_field":"value","_measurement":"Gewicht"},{"result":"_result","table":0,"_start":"2022-12-28T06:40:27.840084988Z","_stop":"2023-01-27T06:40:27.840084988Z","_time":"2023-01-26T04:10:02.814Z","_value":119.908,"_field":"value","_measurement":"Gewicht"}]
                                    

                                    Dann kopiere ich den Wert von Array2 und setze ihn in die Inject Node ein um dann letztendlich irgendwann mal den Flow für das Gewicht nachzubauen.
                                    Bildschirm­foto 2023-01-27 um 07.42.07.png

                                    Was mir klar ist, ist das was ich Dir vorher in einem kleinen Beispiel gepostet habe:
                                    Objekt = Mercedes
                                    Eigenschaften = ( Klimaanlage, Sitzheizung, Airscarf, Verbandskasten)
                                    Wenn ich mich aber nun auf den vorletzten Screenshot beziehe, habe ich mit folgenden Dingen Probleme:
                                    Das Array enthält 2 Objekte - Objekt 0 und Objekt 1
                                    Dann kommen die Eigenschaften: Aber sind wirklich 

                                    result
                                    table
                                    start
                                    stop
                                    time
                                    value
                                    field measurement

                                    alles Eigenschaften?
                                    Du hast mir ja auch mal die Erklärungen hier gepostet:

                                    Bildschirmfoto_2022-09-04_um_22.30.28.png

                                    • Demnach ist die payload die Eigenschaft eines Nachrichtenobjekts (rosa) • Ein Array ist eine Liste mit beliebig vielen Einträgen (grün)
                                    • Jedes Listenelement enthält ein Objekt (orange)
                                    • Jedes Objekt enthält Eigenschaften (blau)
                                    Obwohl ich das jetzt alles nochmal gelesen habe, tue ich mich extrem schwer damit hier die richtigen Dinge für mich herauszulesen und umzusetzen.

                                    Mit besten Grüßen
                                    Andy

                                    1 Reply Last reply
                                    0
                                    • mickymM mickym

                                      @damrak2022 Also ich hab Dir doch in dem Flow eine debug Node gemacht vor der Change Node - also mit dem Inhalt Deiner Abfrage und dann eine debug Node mit dem Inhalt wie das Array aussieht was in die Chart Node geht. Dann schau Dir halt beides an. Und mach das Gleiche mit Deiner neuen Abfrage.

                                      Damrak2022D Offline
                                      Damrak2022D Offline
                                      Damrak2022
                                      wrote on last edited by Damrak2022
                                      #3185

                                      @mickym Die kopierte Change Node habe ich so angepasst, aber Du darfst mal raten - Farbe rot

                                      [
                                         {
                                             "series" : ["Gewicht"],
                                             "data": [
                                                 [
                                                     payload[_measurement="Gewicht"].{
                                                         "x" : $toMillis(_time),
                                                         "y" : _value
                                          
                                                     }
                                                 ],
                                                 
                                                 ]
                                             ],
                                             "labels" : ["Gewicht"]
                                          }
                                      ]
                                      

                                      Irgendwo ist die eckige Klammer falsch, aber ich bin der Meinung jetzt fast alles ausprobiert zu haben:

                                      Ungültiger JSONata-Ausdruck:
                                      The symbol "]" cannot be used as a unary operator
                                      

                                      Mit besten Grüßen
                                      Andy

                                      mickymM 1 Reply Last reply
                                      0
                                      • Damrak2022D Damrak2022

                                        @mickym Die kopierte Change Node habe ich so angepasst, aber Du darfst mal raten - Farbe rot

                                        [
                                           {
                                               "series" : ["Gewicht"],
                                               "data": [
                                                   [
                                                       payload[_measurement="Gewicht"].{
                                                           "x" : $toMillis(_time),
                                                           "y" : _value
                                            
                                                       }
                                                   ],
                                                   
                                                   ]
                                               ],
                                               "labels" : ["Gewicht"]
                                            }
                                        ]
                                        

                                        Irgendwo ist die eckige Klammer falsch, aber ich bin der Meinung jetzt fast alles ausprobiert zu haben:

                                        Ungültiger JSONata-Ausdruck:
                                        The symbol "]" cannot be used as a unary operator
                                        
                                        mickymM Offline
                                        mickymM Offline
                                        mickym
                                        Most Active
                                        wrote on last edited by
                                        #3186

                                        @damrak2022 zu jeder Klammer, die Du öffnest musst du auch wieder eine schließen. Lösch mal Zeile11 und 12.

                                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                        Damrak2022D 2 Replies Last reply
                                        0
                                        • mickymM mickym

                                          @damrak2022 zu jeder Klammer, die Du öffnest musst du auch wieder eine schließen. Lösch mal Zeile11 und 12.

                                          Damrak2022D Offline
                                          Damrak2022D Offline
                                          Damrak2022
                                          wrote on last edited by
                                          #3187

                                          @mickym Habe ich gemacht. Ich weiß das Klammer die geöffnet werden auch geschlossen werden müssen. Ich verstehe nur nicht warum es manchmal in einer Zeile einfach nur eine Klammer gibt oder sogar 2 untereinander.

                                          Mit besten Grüßen
                                          Andy

                                          mickymM 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

                                          92

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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