Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. JS/Blockly "Einsteigertipps" für C-Programmierer (STM32)

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

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

Geplant Angeheftet Gesperrt Verschoben Off Topic
34 Beiträge 10 Kommentatoren 1.6k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ArmilarA Armilar

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

    geht es jedoch darum eine weitere höhere Programmiersprache, die incl. einer "vernünftigen" IDE in ioBroker eingebunden werden soll, ist die Chance noch geringer, da ioBroker auf node aufbaut, und dieses wiederum auf javascript.

    @Sven-Kopelke
    Ich denke man sollte die Kirche im Dorf lassen. Der Script-Bereich ist schon gut so wie er ist. Und du kannst die IDE deiner Wahl nutzen VS, WebStorm, etc.

    Letztendlich kannst du mit TypeScript arbeiten, wenn du es professionell gewohnt bist.

    Ich wünsche mir jetzt auch nicht eine IDE oder die Unterstützung für C, Pascal, Cobol oder Fortran77 nur weil ich das vor 100 Jahren mal benutzt habe und evtl. damit besser zurecht komme. Umdenken... Ist doch nur Semantik und Syntax und sollte für einen Entwickler schnell zu erlernen sein.
    Es macht aus meiner Sicht auch gar keinen Sinn bei node.js mit C ins Rennen zu gehen.

    S Offline
    S Offline
    Sven Kopelke
    schrieb am zuletzt editiert von Sven Kopelke
    #25

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

    ich das vor 100 Jahren mal benutzt habe

    ;-)

    ArmilarA 1 Antwort Letzte Antwort
    0
    • ArmilarA Armilar

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

      geht es jedoch darum eine weitere höhere Programmiersprache, die incl. einer "vernünftigen" IDE in ioBroker eingebunden werden soll, ist die Chance noch geringer, da ioBroker auf node aufbaut, und dieses wiederum auf javascript.

      @Sven-Kopelke
      Ich denke man sollte die Kirche im Dorf lassen. Der Script-Bereich ist schon gut so wie er ist. Und du kannst die IDE deiner Wahl nutzen VS, WebStorm, etc.

      Letztendlich kannst du mit TypeScript arbeiten, wenn du es professionell gewohnt bist.

      Ich wünsche mir jetzt auch nicht eine IDE oder die Unterstützung für C, Pascal, Cobol oder Fortran77 nur weil ich das vor 100 Jahren mal benutzt habe und evtl. damit besser zurecht komme. Umdenken... Ist doch nur Semantik und Syntax und sollte für einen Entwickler schnell zu erlernen sein.
      Es macht aus meiner Sicht auch gar keinen Sinn bei node.js mit C ins Rennen zu gehen.

      S Offline
      S Offline
      Sven Kopelke
      schrieb am zuletzt editiert von Sven Kopelke
      #26

      sorry, Doppel-Post

      1 Antwort Letzte Antwort
      0
      • S Sven Kopelke

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

        ich das vor 100 Jahren mal benutzt habe

        ;-)

        ArmilarA Offline
        ArmilarA Offline
        Armilar
        Most Active Forum Testing
        schrieb am zuletzt editiert von
        #27

        @sven-kopelke

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

        Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
        https://github.com/joBr99/nspanel-lovelace-ui/wiki

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        S 1 Antwort Letzte Antwort
        0
        • ArmilarA Armilar

          @sven-kopelke

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

          S Offline
          S Offline
          Sven Kopelke
          schrieb am zuletzt editiert von
          #28

          @armilar

          => simply => "42"

          ...ich hoffe wir verstehen uns !? ;-)

          ArmilarA 1 Antwort Letzte Antwort
          0
          • S Sven Kopelke

            @armilar

            => simply => "42"

            ...ich hoffe wir verstehen uns !? ;-)

            ArmilarA Offline
            ArmilarA Offline
            Armilar
            Most Active Forum Testing
            schrieb am zuletzt editiert von
            #29

            @sven-kopelke

            Ja ist die Antwort auf alles :+1:

            Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
            https://github.com/joBr99/nspanel-lovelace-ui/wiki

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            1 Antwort Letzte Antwort
            0
            • I ignis-draco

              Ich kenne beide Welten sehr sehr gut und was hier total übersehen wird ist das ein Interpreter Sprache mit einer Compiler sprache verglichen wird. Da besteht einfach nicht die gleichen Möglichkeiten.
              Ich bin auch ein riesiger Fan von Code Vervollständigung aber die klappt selten zu 100% und das auch bei C oder C++.

              Als Tipp: du kannst dir die JavaScript/TrueScript Dateien auf die Festplatte syncen lassen und diesen Ordner auf deinem Dev System mounten und dort eine IDE deiner Wahl nehmen. Das hilft schon mal deutlich was die Übersichtlichkeit an angeht.

              Zu der Sache mit dem device Paths kann ich auch nur den anderen zustimmen das der Alias Adapter genau das richtige ist.
              Ja man legt damit "symLinks" an aber die sind sehr performant. Wenn man dann etwas Kreativität anwendet lässt sich damit
              ein Struktur bauen die viel besser ist als jedes #define.
              Z.b.:
              Screenshot 2022-10-28 101251.png

              Mittels Selector kann der JavaScript Code dann komplett unabhängig von den Devices laufen. So das wenn ich z.b. Ein weiteres Radio um Schlafzimmer aufstelle nur den Alias anlegen und nichts am Script ändern muss.
              Auch kann man eine Übersetzten so einbauen das wenn man z.b. einen Festersensor hat der True/False aufgibt und den gegen einen Tauschen muss der Open/Close ausgibt man nichts ändern muss.

              Aber natürlich ist es dein System und niemand will/kann dir verbieten einen eigenen Zigbee Händler zu bauen.

              S Offline
              S Offline
              Sven Kopelke
              schrieb am zuletzt editiert von
              #30

              @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

              FredFF I 2 Antworten Letzte Antwort
              0
              • S Sven Kopelke

                @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

                FredFF Online
                FredFF Online
                FredF
                Most Active Forum Testing
                schrieb am zuletzt editiert von
                #31

                @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 Antwort Letzte Antwort
                0
                • S Sven Kopelke

                  @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

                  I Offline
                  I Offline
                  ignis-draco
                  schrieb am zuletzt editiert von ignis-draco
                  #32

                  @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.

                  Proxmox [DMAF5] = LXC [Debian 12]
                  ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

                  1 Antwort Letzte Antwort
                  0
                  • S Sven Kopelke

                    Hallo,

                    ich habe eine sicher ungewöhliche Frage, aber ich stelle sie trotzdem mal. ;-)

                    Nachdem ich die "Anfangshürden" genommen und nun in meinem ioBroker einen Conbee2 mit einigen Lidl-Zigbee-Geräten und auch Shellys am Laufen habe will ich damit eine Beleuchtungssteuerung realisieren. Ca. 30 Leuchten in mehreren Räumen und Außenbereich. Ein Raum ist recht groß und dort sollen mehrere unterschiedliche Szenen auswählbar sein.

                    Allerdings finde ich die "IDE-Qualitäten" von IO_Broker verglichen mit denen von meinen geliebten STM32H7 nun doch recht spärlich und unübersichtlich.

                    Blockly hat sicherlich seinen Reiz für Coder-Newbees, aber das Rumgeklicke und Gesuche in der Item-Liste dauert einfach ewig. Zudem befürchte ich, dass man sich da später mal nen Wolf suchen wird wenn man was ändern will oder muss.

                    Die Java-Skript-Variante ist diesebzüglich zwar etwas flotter, doch die Darstellung von Fehlern (z.B. Syntax) ist auch hier nicht sehr hilfreich => wegen einem falschen Zeichen sucht man (ich) jeweils ne ganze Weile.

                    Dass ich im ioBroker nicht den Entwickler- und Debugging-Komfort erwarten kann wie bei z.B: Eclise ist mir schon klar, aber wenigstens eine halbwegs taugliche Auto-Vervollständigen-Funktionalität wäre schon hilfreich. Von „vernünftigem“ Debuggen will ich mal gar nicht anfangen.

                    Manches wäre verschmerzbar, wenn man wenigstens mit einer Art „#define“ "Klartext-Bezeichnungen" für die Items vergebenen könnte. Ich habe zwar hier im Forum was zum Thema „Aliase“ gefunden, aber das bläst die Item-Liste anscheinend noch weiter auf, denn es legt zusätzliche Elemente an, welche die Originalen spiegeln => das erhöht doch auch die Systembelastung, oder?

                    Da ich sicher mal die eine oder andere Komponente tauschen will oder muss bedeutet die Verwendung der unveränderbaren Zigbee-Item-Nummern folglich, dass man jedes Skript, in dem das Gerät verwendet wird korrigieren muss.

                    Darüber hinaus sind die Skripte damit ja auch nicht wirklich verständlich lesbar.

                    Wegen dem allem keimt in mir langsam schon der Gedanke auf, ob ich das Ganze nicht direkt auf einem STM32 als ZigBee-Master zum Laufen zu bringen.

                    Was Zigbee auf dem Level angeht kenne ich mich zwar (noch) nicht aus und verzichte natürlich auch auf viel „Schickes“ was ioBroker mitbringt, aber die Programmierung der Szenen, Schaltabläufe etc. wäre „bare-metal“ oder mit FreeRTOS im Vergleich zu Blockly oder JS echt ein Klacks.

                    ...und kein ggf. fehlerhaftes Update eines Moduls von ioBroker wird mir jemals das Licht ausschalten ;-)

                    Was ich mir mit meinem Thread hier nun erhoffe:

                    Vielleicht kann ja jdm das, was ich geschrieben habe nachvollziehen und mir ein paar wertvolle Tipps geben, da er schon in einer ähnlichen Situation war.

                    Die üblichen Einsteiger-Tipps („erstes JS“ oder „erstes Blockly“) bringen mir (verständlicherweise) nichts.

                    Vielleicht kennt ja jdm DEN Geheimtipp, wie man eine vernünftige IDE in ioBroker integrieren kann oder, oder, oder..

                    ..oder hat jdm schon was mit Zigbee auf Microcontrollern gemacht?

                    Vielen Dank schon mal für die zahlreichen Antworten

                    Gruß

                    Sven

                    S Offline
                    S Offline
                    stefanyukana
                    schrieb am zuletzt editiert von
                    #33

                    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.

                    CodierknechtC 1 Antwort Letzte Antwort
                    0
                    • S stefanyukana

                      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.

                      CodierknechtC Online
                      CodierknechtC Online
                      Codierknecht
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #34

                      @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.

                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                      Proxmox 9.0.18 LXC|8 GB|Core i7-6700
                      HmIP|ZigBee|Tasmota|Unifi
                      Zabbix Certified Specialist
                      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      790

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe