Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. JS/Blockly "Einsteigertipps" für C-Programmierer (STM32)

    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

    JS/Blockly "Einsteigertipps" für C-Programmierer (STM32)

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sven Kopelke @Armilar last edited by Sven Kopelke

      Erst mal herzlichen Dank an Euch Alle – da sind ja schon mal ein paar interessante Anregungen dabei die ich bisher nicht gefunden habe.

      Wie so oft: Wenn man die passenden Suchbergriffe endlich mal hat wird es deutlich einfacher – z.B.: „Alias“ ist bei mir bis vor diesem Thread nicht begegnet obwohl ich einiges angeklappert habe... (ich habe ja auch eher nach "#define" gesucht 😉

      Dass ich nicht auf, mit oder in IOBroker C programmieren will ist schon klar. Die Sprache an sich ist mir ja auch egal, ich habe nichts gegen Java-Skript. Es ging mir vorwiegend um das ganze „Handling“.

      Der Thread-Titel sollte eine Anregung für Erfahrenen sein, denen es schon ähnlich ging Ihre Erfahrungen zu teilen => und das hat ja nun auch gut funktioniert.

      Ich werde mal ein paar von den Tipps ausprobieren.

      P.S.: Assembler kenne ich noch ein ganz klein wenig von C64 😉
      Da gab es auch mal einen "Wettbewerb": Das "Ein-Zeilen-Assembler-Programm" ... oder so ähnlich: Eine Zeile definiert einen String = 255 Zeichen = Ascii-Code = zusammen 255 Assembler-Befehle & Werte/Argumente 🙂 🙂

      Ich mache nur Embedded Programmierung.

      Mit C auf Windows/Linux oder auch Raspi etc habe ich nichts am Hut - soweit ich weiß ist das eine ganz andere Welt – da „bringt“ die Objektorientierung angeblich auch wirklich was - im Gegensatz zum µP

      1 Reply Last reply Reply Quote 0
      • S
        Sven Kopelke @Armilar last edited by Sven Kopelke

        @armilar

        ...Du hast nicht mich sondern einen Post von homoran zitiert.... !?

        wie oben geschrieben möchte ich auch nicht "C" in ioBroker. Es geht mir um das Handling, Debugging, Übersichtlichkeit etc. ... und das ist erstmal ziemlich unabhängig von der Programmiersprache..

        Aber: ...wenn Du anno 1922 (=15 Jahre vor der Zuse 1 🙂 ) schon mit C programmiert hast => "Chapeau" !! 😉

        Weiterhin Danke für alle Antworten - das weiter oben hilft schon mal sehr

        Armilar 1 Reply Last reply Reply Quote 0
        • Armilar
          Armilar Most Active Forum Testing @Sven Kopelke last edited by

          @sven-kopelke

          Selbst wenn wir die Erstausgabe von Kernighan & Richie betrachten, wären es erst 44 Jahre. Die Ausgabe gibt es bei mir aber noch 😉

          1 Reply Last reply Reply Quote 0
          • S
            Sven Kopelke @Armilar last edited by Sven Kopelke

            @armilar said in JS/Blockly "Einsteigertipps" für C-Programmierer (STM32):

            ich das vor 100 Jahren mal benutzt habe

            😉

            Armilar 1 Reply Last reply Reply Quote 0
            • S
              Sven Kopelke @Armilar last edited by Sven Kopelke

              sorry, Doppel-Post

              1 Reply Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @Sven Kopelke last edited by

                @sven-kopelke

                ich denke aber, dass du dennoch sehr viele schöne neue Sachen in dieser Umgebung zustande bekommst. 😊

                S 1 Reply Last reply Reply Quote 0
                • S
                  Sven Kopelke @Armilar last edited by

                  @armilar

                  => simply => "42"

                  ...ich hoffe wir verstehen uns !? 😉

                  Armilar 1 Reply Last reply Reply Quote 0
                  • Armilar
                    Armilar Most Active Forum Testing @Sven Kopelke last edited by

                    @sven-kopelke

                    Ja ist die Antwort auf alles 👍

                    1 Reply Last reply Reply Quote 0
                    • S
                      Sven Kopelke @ignis-draco last edited by

                      @ignis-draco
                      Das mit Deiner Alias-Struktur klingt interessant.
                      Gibt's da irgendwo ein "How-To" 😉

                      Aus Deinem Screenshot erschließt sich mir das nämlich leider nicht ganz, sorry

                      FredF I 2 Replies Last reply Reply Quote 0
                      • FredF
                        FredF Most Active Forum Testing @Sven Kopelke last edited by

                        @sven-kopelke sagte in JS/Blockly "Einsteigertipps" für C-Programmierer (STM32):

                        Gibt's da irgendwo ein "How-To"

                        Hilft das?
                        https://www.iobroker.net/#de/documentation/dev/aliases.md

                        1 Reply Last reply Reply Quote 0
                        • I
                          ignis-draco @Sven Kopelke last edited by ignis-draco

                          @sven-kopelke

                          Ich habe dazu bis jetzt noch nichts geschrien und ich bin mir nicht sicher ob im Forum dazu was steht.
                          Die Grund Idee habe ich aus der KNX Welt (auch wenn ich bis jetzt noch nie was mit KNX gemacht habe).

                          Mein Grund Idee ist das ich ein gleichbleibende Struktur haben wollte die auch bei einem Haus funktioniert.

                          Den Fenstersensor in der Küche hat folgenden Path:
                          alias.0.eg.kitchen.clima.isOpen

                          Ebene :
                          0) Der Alias Ordner (Vorgegeben)
                          0a) Alias Instanz (Vorgegeben)

                          1. Etage
                          2. Raum
                          3. Funktion
                          4. Daten Punkt

                          Als Funktionen haben ich aktuell :

                          • Battery -> Batterie Zustand von allen Geräten in dem Raum
                          • clima -> Heitzung und Klimaanlage
                          • power -> Stromschalter und/oder Messgeräte
                          • pressend -> Alles was ich zu Erkennung von Personen verwenden kann. z.b. Bewegungsmelder oder auch device-reminder
                          • audo -> Radio
                          • light -> licht auch Helligkeitsmessung
                          • speak -> noch leer geplant für Voice Controll.

                          Um z.b. alle Fenstersensoren im eg auszulesen kann man dann Folgenden Zeilen verwenden.

                          let ids = $('state[id=alias.0.eg.*.isOpen]')
                          for(let i = 0; i < ids.length; i++){
                              console.log(ids[i] + " = " + getState(ids[i]).val  )
                          }
                          

                          Die Struktur (ohne die Datenpunkte) habe ich zwei mal.

                          • alias.0. => Die echten Geräte
                          • 0_userdata.0 => für variablen

                          Zum erstellen der Ganzen "Ordner" habe ich ein Skript geschrieben.

                          function createStruct()
                          {
                              let paths = ["0_userdata.0", "alias.0"]
                              //Überall!!
                              let floors = new Object()
                              floors["eg"] = ["outdoor","wc","office","kitchen","sleeping_room","living_room","hallway"]
                              let func = ["light", "audio", "clima", "pressend","power","speak", ]
                              func.sort();
                          
                              for(const base of paths){
                                  if(!existsObject(base)){
                                      console.log("base not exists!");		
                                  }else{
                                      for(const [floor, rooms] of Object.entries(floors)){
                                          rooms.sort()
                                          for(const room of rooms){
                                              var path_tmp = base + "." + floor + "." + room
                                             // if(!existsObject(path_tmp)){
                                                  setObject(path_tmp, {
                                                      type: 'folder',
                                                      common: {
                                                          name: room
                                                      },
                                                      native: {}
                                                  });
                                              //}
                                              for (const item of func){
                                                  let path2_tmp = path_tmp + "." + item
                                                //  if(!existsObject(path2_tmp)){
                                                      setObject(path2_tmp, {
                                                          type: 'folder',
                                                          common: {
                                                              name: item
                                                          },
                                                          native: {}
                                                      });                    
                                               //   }
                                              }
                                          }
                                      }
                                  } 
                              }
                          
                             //  ##################### Userdata global ###############
                              let glob = ["radio", "timer", "refuel", "weather", "shopping", "clima"]; 
                              glob.sort();
                              if(!existsObject("0_userdata.0.global")){
                                   setObject("0_userdata.0.global", {
                                      type: 'folder',
                                      common: {
                                          name: "Global"
                                      },
                                      native: {}
                                  });
                              }
                              for(const item of glob){
                                  if(!existsObject("0_userdata.0.global."+item)){
                                   setObject("0_userdata.0.global."+item, {
                                      type: 'device',
                                      common: {
                                          name: item
                                      },
                                      native: {}
                                  });
                                  }
                              }
                              //  ##################### alias global ###############
                              let glob2 = ["audio", "clima"]; 
                              glob2.sort();
                              if(!existsObject("alias.0.global")){
                                   setObject("alias.0.global", {
                                      type: 'folder',
                                      common: {
                                          name: "Global"
                                      },
                                      native: {}
                                  });
                              }
                              for(const item of glob2){
                                  if(!existsObject("alias.0.global."+item)){
                                   setObject("alias.0.global."+item, {
                                      type: 'device',
                                      common: {
                                          name: item
                                      },
                                      native: {}
                                  });
                                  }
                              }
                          }
                          createStruct();
                          

                          Nachtrag:
                          Ich habe ganz vergessend den Global teil zu erwähnen. Die kommt alles rein das nicht Raum gebunden ist.
                          Z.b. Ob die Heizung überhaupt laufen soll, oder Welch Radio Sender gespielt werden können.

                          Mein Plan ist es alles in den Scripten keinen Festen Path oder Value mehr zu haben sondern alles über Datenpunkte und dem Selector zu machen (Noch Verwede ich auch noch die Aufzählungen aber da ich mit den Selectoren mehr Möglichkeit habe werde ich das nach und nach umschreiben.)
                          Ich hoffe es ist etwas klarer geworden. Der Alias Adapter gibt ein echt viele Möglichkeiten die man erst später wirklich versteht.

                          1 Reply Last reply Reply Quote 0
                          • S
                            stefanyukana @Sven Kopelke last edited by

                            Hallo,

                            deine Herausforderungen mit ioBroker sind verständlich. Die IDE-Qualitäten könnten verbessert werden, insbesondere für Entwickler, die mit leistungsstärkeren Plattformen arbeiten. Die Sparsamkeit an Features könnte frustrierend sein, besonders wenn du gewohnt bist, mit hochentwickelten Systemen wie dem STM32H7 zu arbeiten.

                            Es ist bedauerlich, dass die Auto-Vervollständigung und Fehlerdarstellung in JavaScript nicht deinen Erwartungen entsprechen. Die Suche nach Fehlerquellen kann in solchen Umgebungen zeitaufwendig sein.

                            Die Idee, Zigbee auf einem STM32 direkt zu steuern, ist interessant, besonders für die programmierbare Steuerung von Szenen und Schaltabläufen. Die Bare-Metal-Programmierung oder die Nutzung von FreeRTOS könnten eine attraktive Alternative zu Blockly oder JavaScript sein.

                            In Bezug auf ioBroker und die unveränderbaren Zigbee-Item-Nummern könnten Alias-Lösungen zwar hilfreich sein, aber die zusätzlichen Elemente könnten die Systembelastung erhöhen und die Lesbarkeit der Skripte beeinträchtigen.

                            Leider kann ich keinen spezifischen Tipp zur Integration einer umfassenderen IDE in ioBroker geben. Es könnte helfen, Foren oder Communities aufzusuchen, um Erfahrungen von JavaScript Programmierer mit ähnlichen Herausforderungen zu erhalten. Vielleicht hat jemand Lösungen für erweiterte Entwicklungsumgebungen oder Erfahrungen mit Zigbee auf Mikrocontrollern, die für dich nützlich sein könnten.

                            Codierknecht 1 Reply Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @stefanyukana last edited by

                              @stefanyukana sagte in JS/Blockly "Einsteigertipps" für C-Programmierer (STM32):

                              Leider kann ich keinen spezifischen Tipp zur Integration einer umfassenderen IDE in ioBroker geben

                              Aber andersrum.
                              Für VSCode gibt es ein ioBroker AddIn, um die Scripte mit VSCode bearveiten zu können.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              702
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

                              10
                              34
                              1460
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo