Ankündigung

Einklappen
Keine Ankündigung bisher.

Vorstellung: Excel-Tool zur Erstellung von GA (Mittelgruppen-System)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • concept
    antwortet
    Zitat von DerOptimist Beitrag anzeigen
    Mittelgruppensystem wohl doch nicht das Richtige ist für die Komponenten die ich habe Insbesondere die PM - B-J premium - haben ja unzählige GA, und die MDT Glastaster wohl auch.

    Du hast das Mittelgruppensystem beziehungsweise wie man sinnvoll und übersichtlich GA's anlegt noch nicht verstanden. Man fängt nicht beim Sensor/Eingabegerät an sondern bei der Funktion/Aktor. Dies auch beim Blocksystem!

    Alles ist hier gut erklärt: "Ultimativer ETS 5 Schenllkurs" von Manfred Meier... irgendwo in der Mitte vom Kurs...

    Einen Kommentar schreiben:


  • gbglace
    antwortet
    Zitat von DerOptimist Beitrag anzeigen
    Mittelgruppensystem wohl doch nicht das Richtige ist für die Komponenten die ich habe Insbesondere die PM - B-J premium - haben ja unzählige GA, und die MDT Glastaster wohl auch.
    Nur weil ein PM und Taster viele KO hat passt immer noch ein Mittelgruppensystem. Denn dieses System ist eben genau auf Funktionen/ Funktionsgruppen/Gewerke und nicht auf Geräte ausgerichtet. Alles was an dem Taster z.B. zur Heizungsverstellung usw. dient ist doch eh ein eigenes Gewerk und somit in einer anderen Hauptgruppe untergebracht. Text-Nachrichten die man da drauf abbildet ist auch nen eigenes "Gewerk". Wer das Mittelgruppensystem anwenden will muss konsequenter in Funktionsgruppen denken.

    Wer nur den Aktor / Sensor und jene KO sieht kommt aber auch mit dem Blocksystem irgendwann nicht mehr klar (als Anfänger). Da muss man sich dann auch entscheiden ob das ganze dann Aktor oder Sensor getrieben ist weil man sonst bei der Verbindung von Aktor und Sensor auch durcheinander kommt und nicht weiß wo man das dann anlegt als GA im Block zum Sensor oder als GA im Block zum Aktor. Und wenn dann die GA noch an diversen anderen Aktoren/Sensoren verbunden werden ist das erstmal auch nicht sonderlich selbsterklärend.

    Einen Kommentar schreiben:


  • concept
    antwortet
    Zitat von GLT Beitrag anzeigen

    Stimmt - wäre die ETS eine 1000 Euro Software und würde sich z.B. mit dem Zusatz "pro" für professional rühmen, sollte derlei eine Grundfunktion sein (neben anderen Dingen). Aber bei einer Billigversion für Privatleute kann man sowas schon mal in Kauf nehmen.

    Du hast ja vollkommen recht, aber leider ist es so wie es ist und wenn man damit Zeit sparen kann, kauft man ein Zusatztool...

    Wobei ich denke, es ist oft umgekehrt: Irgendwelchen günstigen Softwarepakete für private sind komplett, während man im Profibereich durch viele Optionen zusätzlich Kohle verdienen will.
    Zuletzt geändert von concept; 28.05.2019, 14:33.

    Einen Kommentar schreiben:


  • DerOptimist
    antwortet
    Hallo zusammen,
    danke für die rege Beteiligung :-) Nachdem ich mein Tool jetzt auf einem Stand habe, mit dem ich zufrieden bin, hab ich gemerkt dass das Mittelgruppensystem wohl doch nicht das Richtige ist für die Komponenten die ich habe Insbesondere die PM - B-J premium - haben ja unzählige GA, und die MDT Glastaster wohl auch. Ich werde also wohl doch eher das Blocksystem nutzen. Ich möchte euch trotzdem kurz mein Update zeigen, vielleicht möchte es ja jemand nutzen.
    Es gibt 2 wesentliche Änderungen:
    • Es gibt jetzt einen Bereich, in dem GA manuell definiert werden können. Z.B. Zentraladressen oder die vielen GA einer Wetterstation
    • Man kann jetzt für jede UG nicht nur eine HG auswählen, sondern mittels "/" auch nur eine MG davon. Ich hab gemerkt, dass es nicht arg sinnvoll ist dem Fußboden außer der Temperatur auch noch GA für Wetter und Kontaktstatus zuzuweisen, nur weil die auch in der HG Sensoren sind. Folgende Einträge in Spalte K wären also beispielsweise möglich:
      • 1
      • 1;2
      • 13/2
      • 13/2;13/3;15
    Viel Spaß damit
    Gruß Jochen

    Code:
    Option Explicit
    
    Private Sub Erstelle_GA_Click()
    
    Dim Beschreibung_HG As String
    Dim Beschreibung_MG As String
    Dim Beschreibung_UG As String
    Dim Beschreibung_gesamt As String
    Dim HG_angefragt_str As String
    Dim Gr_angefragt_einzeln_str As Variant
    Dim HG_angefragt_einzeln_str As Variant
    Dim MG_angefragt_einzeln_str As Variant
    Dim HG_angefragt_einzeln_int As Integer
    Dim MG_angefragt_einzeln_int As Integer
    Dim HG_int As Integer
    Dim MG_int As Integer
    Dim MG_Gesamtzaehler As Integer
    Dim UG_int As Integer
    Dim GA_Zaehler As Integer
    Dim Letzte_Zeile_manuell As Integer
    Dim Zaehler_manuelle As Integer
    
    
    GA_Zaehler = 0
    Worksheets("GA").UsedRange.ClearContents
    
    For HG_int = 0 To 31
    
        If Cells(HG_int + 3, 2).Value <> "" Then
        
            ' Hauptgruppe ist benutzt, lege HG-GA an
            GA_Zaehler = GA_Zaehler + 1
            Beschreibung_HG = Cells(HG_int + 3, 2).Value
            Worksheets("GA").Cells(GA_Zaehler, 1).NumberFormat = "@"
            Worksheets("GA").Cells(GA_Zaehler, 1).Value = Chr(34) & Beschreibung_HG & Chr(34)
            Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
            Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(HG_int) & "/-/-" & Chr(34)
            
            ' schau welche Mittelgruppen benutzt sind
            For MG_Gesamtzaehler = 0 To 255
            
                ' gehoert diese Zeile zur aktuellen HG?
                If CInt(Cells(MG_Gesamtzaehler + 3, 4).Value) = HG_int Then
                    ' pruefe ob diese MG benutzt ist
                    If Cells(MG_Gesamtzaehler + 3, 7).Value <> "" Then
                        ' MG ist benutzt und gehoert zur akuellen HG => lege MG-GA an
                        GA_Zaehler = GA_Zaehler + 1
                        MG_int = CInt(Cells(MG_Gesamtzaehler + 3, 6).Value)
                        Beschreibung_MG = Cells(MG_Gesamtzaehler + 3, 7).Value
                        Worksheets("GA").Cells(GA_Zaehler, 2).NumberFormat = "@"
                        Worksheets("GA").Cells(GA_Zaehler, 2).Value = Chr(34) & Beschreibung_HG & "-" & Beschreibung_MG & Chr(34)
                        Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
                        Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(HG_int) & "/" & CStr(MG_int) & "/-" & Chr(34)
                        
                        ' gehe alle Untergruppen (Objekte) durch und schau, ob sie die aktuelle HG brauchen
                        For UG_int = 0 To 255
                            HG_angefragt_str = Cells(UG_int + 3, 11).Value
                            For Each Gr_angefragt_einzeln_str In Split(HG_angefragt_str, ";")
                                If InStr(Gr_angefragt_einzeln_str, "/") = 0 Then
                                    ' die gesamt HG ist gewuenscht
                                    HG_angefragt_einzeln_int = CInt(Gr_angefragt_einzeln_str)
                                    If HG_angefragt_einzeln_int = HG_int Then
                                        ' jep, dieses Objekt moechte die aktuelle HG haben, erstelle die GA
                                        GA_Zaehler = GA_Zaehler + 1
                                        Beschreibung_UG = Cells(UG_int + 3, 10).Value
                                        Worksheets("GA").Cells(GA_Zaehler, 3).NumberFormat = "@"
                                        Worksheets("GA").Cells(GA_Zaehler, 3).Value = Chr(34) & Beschreibung_UG & "-" & Beschreibung_MG & Chr(34)
                                        Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
                                        Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(HG_int) & "/" & CStr(MG_int) & "/" & CStr(UG_int) & Chr(34)
                                    End If
                                Else
                                    ' nur eine bestimmt MG dieser HG ist gewuenscht
                                    HG_angefragt_einzeln_str = Split(Gr_angefragt_einzeln_str, "/")(0)
                                    MG_angefragt_einzeln_str = Split(Gr_angefragt_einzeln_str, "/")(1)
                                    HG_angefragt_einzeln_int = CInt(HG_angefragt_einzeln_str)
                                    MG_angefragt_einzeln_int = CInt(MG_angefragt_einzeln_str)
                                    If HG_angefragt_einzeln_int = HG_int Then
                                        ' jep, dieses Objekt moechte die aktuelle HG haben
                                        If MG_angefragt_einzeln_int = MG_int Then
                                            ' jep, dieses Objekt moechte die aktuelle MG haben, erstelle GA
                                            GA_Zaehler = GA_Zaehler + 1
                                            Beschreibung_UG = Cells(UG_int + 3, 10).Value
                                            Worksheets("GA").Cells(GA_Zaehler, 3).NumberFormat = "@"
                                            Worksheets("GA").Cells(GA_Zaehler, 3).Value = Chr(34) & Beschreibung_UG & "-" & Beschreibung_MG & Chr(34)
                                            Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
                                            Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(HG_int) & "/" & CStr(MG_int) & "/" & CStr(UG_int) & Chr(34)
                                        End If
                                    End If
                                End If
                            Next
                        Next
                    End If
                End If
            Next
        End If
    Next
    
    ' Fuege manuelle GA hinzu
    Letzte_Zeile_manuell = ActiveSheet.Cells(1048576, 16).End(xlUp).Row
    For Zaehler_manuelle = 3 To Letzte_Zeile_manuell
        
        If Cells(Zaehler_manuelle, 13).Value <> "" Then
            GA_Zaehler = GA_Zaehler + 1
            Worksheets("GA").Cells(GA_Zaehler, 1).NumberFormat = "@"
            Worksheets("GA").Cells(GA_Zaehler, 1).Value = Chr(34) & Cells(Zaehler_manuelle, 13).Value & Chr(34)
            Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
            Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(Cells(Zaehler_manuelle, 16).Value) & "/-/-" & Chr(34)
        Else
            If Cells(Zaehler_manuelle, 14).Value <> "" Then
                GA_Zaehler = GA_Zaehler + 1
                Worksheets("GA").Cells(GA_Zaehler, 2).NumberFormat = "@"
                Worksheets("GA").Cells(GA_Zaehler, 2).Value = Chr(34) & Cells(Zaehler_manuelle, 14).Value & Chr(34)
                Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
                Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(Cells(Zaehler_manuelle, 16).Value) & "/" & CStr(Cells(Zaehler_manuelle, 17).Value) & "/-" & Chr(34)
            Else
                If Cells(Zaehler_manuelle, 15).Value <> "" Then
                    GA_Zaehler = GA_Zaehler + 1
                    Worksheets("GA").Cells(GA_Zaehler, 3).NumberFormat = "@"
                    Worksheets("GA").Cells(GA_Zaehler, 3).Value = Chr(34) & Cells(Zaehler_manuelle, 15).Value & Chr(34)
                    Worksheets("GA").Cells(GA_Zaehler, 4).NumberFormat = "@"
                    Worksheets("GA").Cells(GA_Zaehler, 4).Value = Chr(34) & CStr(Cells(Zaehler_manuelle, 16).Value) & "/" & CStr(Cells(Zaehler_manuelle, 17).Value) & "/" & CStr(Cells(Zaehler_manuelle, 18).Value) & Chr(34)
                End If
            End If
        End If
    Next
    
    SaveCSV
    
    End Sub
    
    Sub SaveCSV()
    
    ' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei
    ' mit wählbarem Trennzeichen und Maskierung von Einträgen
    
    Dim Bereich As Object, Zeile As Object, Zelle As Object
    Dim strTemp As String
    Dim strDateiname As String
    Dim strTrennzeichen As String
    Dim strMappenpfad As String
    
    strMappenpfad = Left(ThisWorkbook.FullName, (InStrRev(ThisWorkbook.FullName, ".", -1, vbTextCompare) - 1))
    strMappenpfad = strMappenpfad & ".csv"
    
    strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export", _
    strMappenpfad)
    If strDateiname = "" Then Exit Sub
    
    strTrennzeichen = ";"
    
    Set Bereich = Worksheets("GA").UsedRange
    
    Open strDateiname For Output As #1
    
    For Each Zeile In Bereich.Rows
    For Each Zelle In Zeile.Cells
    If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
    'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
    strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
    Else
    strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
    End If
    Next
    If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
    Print #1, strTemp
    strTemp = ""
    Next
    
    Close #1
    Set Bereich = Nothing
    MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
    
    End Sub
    Angehängte Dateien

    Einen Kommentar schreiben:


  • Eraser
    antwortet
    GLT

    Einen Kommentar schreiben:


  • GLT
    antwortet
    Zitat von concept Beitrag anzeigen
    mein Lieblings-ETS-Zusatztool
    Stimmt - wäre die ETS eine 1000 Euro Software und würde sich z.B. mit dem Zusatz "pro" für professional rühmen, sollte derlei eine Grundfunktion sein (neben anderen Dingen). Aber bei einer Billigversion für Privatleute kann man sowas schon mal in Kauf nehmen.

    Einen Kommentar schreiben:


  • concept
    antwortet
    Zitat von predi ger many Beitrag anzeigen
    Ein 100% System in den Nummern wird es nie geben

    Ja, es ist schwierig, doch ich versuch's und deshalb ist mein Lieblings-ETS-Zusatztool das "Adressen verschieben" von IT Gmbh....

    Damit lassen sich manche Planungsfehler korrigieren

    Einen Kommentar schreiben:


  • predi ger many
    antwortet
    Hallo,

    hier die Lösung, wie man mit ETS 5 die Nummern das GAs zu Schall und Rauch verwandelt.

    GA_1.jpg

    Im Bild sieht man GA ins 0/0 und 0/1 ohne System in den Nummer. System ist im Namen. Die Suche funktioniert nur über die die markierte GAs.
    Das ist doof.

    GA_2.jpg

    Dynamischer Ordner für ALLE GAs.

    GA_3.jpg

    Die Struktur steckt in Namen. Man könnte die Beschreibung auch nutzen um eine zweite Struktur aufzubauen.

    Sample:
    Name = Stockwerk / Raum / Gewerk / Funktion
    Beschreibung = Funktion / Gewerk / ...

    ... oder was auch immer.

    Ein 100% System in den Nummern wird es nie geben. Aber Über Namen und die Beschreibung kann man alles abfackeln.
    Nummern sind mit der Suche und dem Sortieren praktisch überflüssig.
    Zuletzt geändert von predi ger many; 26.05.2019, 21:03.

    Einen Kommentar schreiben:


  • concept
    antwortet
    Zitat von GLT Beitrag anzeigen
    Sowohl Mittelgruppen- als auch Blocksystem haben ihre Vor-/Nachteile - sollte man je nach Projekt entscheiden.
    also ich setzte beides ein innerhalb der projekte. mittelgruppe wo möglich und sonnvoll, rest möglichst blocksystem.

    Zitat von GLT Beitrag anzeigen
    Persönlich setze ich schon lange kein GA-Generator-Tool mehr ein - bin schneller u. flexibler ohne, vor allem bei Fremdprojekten.
    sehe das ähnlich, mein excel-tool ist kein ga-generator im klassischen sinn sondern dient mir dazu,eine einheitliche syntax für alle ga's einzuhalten und das ganze dann via csv (oder bei kleineren ergänzungen via copy & paste) in die ets zu kopieren.

    durch diese einheitliche syntax versteht man viel besser was auf dem bus läuft und such- und filterfunktionen sind natürlich auch möglich.

    Einen Kommentar schreiben:


  • Schlaubi
    antwortet
    Moin,

    oder man konfiguriert sich einen Dynamischen Ordner dafür
    Dynamischer Ordner.PNG

    Einen Kommentar schreiben:


  • Beleuchtfix
    antwortet
    Du musst im Baum alle Hauptgruppen aufklappen und alle Mittelgruppen markieren.

    Viel Erfolg Florian

    Einen Kommentar schreiben:


  • Gast1961
    antwortet
    Zitat von predi ger many Beitrag anzeigen
    Wenn man eine Struktur in der Bezeichnung der GA hat, ist die Nummer Schall und Rauch
    Nochmal die Frage zur praktischen Anwendbarkeit: wie suchst du im GA-Fenster über alle Gruppen hinweg nach einem Namensfragment?

    Zuletzt geändert von Gast1961; 26.05.2019, 10:46.

    Einen Kommentar schreiben:


  • GLT
    antwortet
    Sowohl Mittelgruppen- als auch Blocksystem haben ihre Vor-/Nachteile - sollte man je nach Projekt entscheiden.

    Persönlich setze ich schon lange kein GA-Generator-Tool mehr ein - bin schneller u. flexibler ohne, vor allem bei Fremdprojekten.

    Einen Kommentar schreiben:


  • concept
    antwortet
    liebe chaoten, ich steh total auf das mittelgruppen-system und wende es überall an wo es passt, insbesondere immer bei licht, jalousien, ggf auch elektrische fenster, türen, tore, etc... und wo es nicht passt, kommt dann das blocksystem. wenn man das versteht und clever anlegt spart das erstens immens zeit (hab mein eigenes excel-tool) und ist zweitens extrem übersichtlich, letztlich auch beim trouble-shooting...

    chaos ist reserviert für den schreibtisch, büro, labor und die beziehung... aber nicht für die ga's


    ps: die inside geht mir übrigens am a.... vorbei. wer will meine lizenz?
    Zuletzt geändert von concept; 25.05.2019, 23:20.

    Einen Kommentar schreiben:


  • DirtyHarry
    antwortet
    Ich mag dieses System auch nicht so besonders. Man muss zu schnell davon abweichen (oder mehrere Hauptgruppen benutzen), weil die Mitttelgruppen zu knapp werden.

    Jetzt aber mal wieder was, was nicht OT ist:

    Ich würde die beiden Zeilen
    Code:
    strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export", strMappenpfad)
    If strDateiname = "" Then Exit Sub
    gegen diese ersetzen:
    Code:
    strDateiname = Application.GetSaveAsFilename(strMappenpfad, "CSV-Datei (*.csv), *.csv", , "CSV-Export")
    If strDateiname = "Falsch" Then Exit Sub
    Bringt den normalen Datei-Dialog mit allen Möglichkeiten.


    Edit:
    Die Auslegung auf 31 Hauptgruppen ist zwar sinnvoll, jedoch ist das Nutzen dieser nicht unbedingt empfehlenswert. Es gibt einfach noch zu viele Geräte, die damit nicht zurecht kommen.
    Zuletzt geändert von DirtyHarry; 25.05.2019, 14:10.

    Einen Kommentar schreiben:

Lädt...
X