Ankündigung

Einklappen
Keine Ankündigung bisher.

Bausteinfrage: "Sperre für Text, wenn bestimmter Teiltext enthalten"

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

    HS/FS Bausteinfrage: "Sperre für Text, wenn bestimmter Teiltext enthalten"

    Hallo!

    Ich suche einen Baustein, der einen Text nur durchleitet, wenn ein bestimmter (an einem Eingang einstellbarer) Teiltext nicht enthalten ist.

    Konkret: ein Anruf-XML von der Fritzbox vorne rein, wenn eine bestimmte Rufnummer enthalten ist, nicht durchlassen. Hintergrund: Ich will eine Rufnummer nicht in meine Anrufliste schreiben, weil das die ist, die ich zur Steuerung meines Garagentores über Callmon nutze. Wenn ich also mein Garagentor ein paar mal anrufe, hab ich nur noch meine eigene Handynummer in der Anrufliste stehen. Außerdem wird mir jeder der Anrufe als Anruf in Abwesenheit signalisiert!

    Gibt es so etwas?

    Ansonsten: Ihr wisst ja, dass ich in Sachen Bausteinprogrammierung nix kann :-( aber ich hab mich mal mit dem Grundgerüst versucht - wer kann mich bei der Berechnungszeile unterstützen, die ich mal in Klartext formuliert habe?

    Dank und Gruß

    Olaf

    Code:
    ################################################## #########################################
    # Definition Logikbaustein "Textfilter" #
    ################################################## #########################################
    # xxx
    # Version 1.0
    # 22.04.2020
    ################################################## #########################################
    # Eingang 1: Der eingehende Text
    # Eingang 2: Der Text, der nicht enthalten sein darf
    # Ausgang 1: Der eingehende Text, wenn er den an E2 definierten Text nicht enthält
    ################################################## #########################################
    
    ### 5000 Definition für HS-Experte
    
    5000|"Textfunktionen\Textfilter(xxxxx)"|0|2|"E1 Text"|"E2 Filtertext"|1|"A1 Text"
    
    ### 5001 Definition des Bausteins
    # 5001|Anzahl Eingänge|Ausgänge|Zeitspeicher|Speicher|Berechnung bei Init
    
    5001|2|1|0|0|0
    
    ### 5002 Definition der Eingänge EN[x]
    # 5002|Index Eingang|Default Wert|Datenformat 0=numerisch 1=alphanummerisch
    
    5002|1|""|1 # Eingang Text
    5002|2|""|1 # Eingang Filtertext
    
    ### 5004 Definition der Ausgänge AN[x]
    
    # 5004|Index Ausgang|Initwert|Runden binär|Typ (1-send/2-sbc)|Datenformat 0=numerisch 1=alphanummerisch
    
    5004|1|""|0|1|1
    
    ### Ausgangslogik
    
    5012|0|"[COLOR=#e74c3c][B]wenn EN[1] nicht EN[2] enthält[/B][/COLOR]"|"EN[1]"|""|1|0|0|0
    Zuletzt geändert von Hightech; 22.04.2020, 15:24.
    Möchte den Komfort meiner Installation nicht mehr missen!

    #2
    ​​​​Moin,

    bedarf es da denn auf jeden Fall eines eigenen Bausteins? Müsste das nicht auch so funktionieren?

    Textsperre.jpg
    Zuletzt geändert von SirTom; 23.04.2020, 06:11.

    Kommentar


      #3
      Hallo!

      Hhm, ja, damit könnte es auch gehen, wenn ich den Baustein richtig verstehe:
      • ich habe eine XML "irgendeintextmiteinerRufnummer1234567drin"
      • wenn 1234567 drin vorkommt, dann nichts machen, wenn er drin vorkommt XML auf XML_zur_Weiterverarbeitung kopieren
      Wenn ich Deine Logik oben richtig verstehe, ersetzt der 16780 im Modus E4 = 2 nicht nur den Suchtext mit der Ersetzung sondern setzt den den A1 auf den Suchtext? Also würde ich die Logik so machen:
      • XML an E1 vom 16780
      • Suchtext ist mein 1234567
      • Bei Treffer wird A1 vom 16780 auf 1234567 gesetzt
      • Texte vergleichen dahinter mit E2 = 1234567
      • Wenn A1 Vergleich = 0 (also Texte gleich, weil Text gefunden), dann kopiere XML nach XML_Weiterverarbeitung
      Sollte doch so gehen, oder?

      (Eleganter wäre es natürlich, einen Baustein zu haben, der am Ausgang den Eingangstext direkt auf mein XML_Weiterverabeitung sendet, wenn der Suchtext im Eingangstext enthalten ist und wenn nicht enthalten, dann einfach gar nichts macht)

      Gibt es in Python nicht so eine Formel "ist Suchtext in Eingangstext enthalten"?

      Grüße

      Olaf
      Möchte den Komfort meiner Installation nicht mehr missen!

      Kommentar


        #4
        Ja, das könnte klappen. Zu Python kann ich leider nichts sagen.

        Kommentar


          #5
          https://www.javatpoint.com/python-string-rfind-method
          Gruß Matthias
          EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
          - PN nur für PERSÖNLICHES!

          Kommentar


            #6
            MatthiasS

            Ja, ich glaube, genau das ist es...
            • die Funktion liefert also die Stelle zurück, wo der gesuchte String beginnt (zero-based, also wenn es die 16. Stelle ist, liefert die Funktion 15 zurück, weil die erste Position 0 ist)
            • Was liefert die Funktion zurück, wenn der Suchtext nicht gefunden wird?
            Kannst Du mir noch ein Stück weiterhelfen, wie die Formel für die 5012 Zeile aussehen muss - also wie muss die Bedinung aussehen, damit sie beim Finden des Textes wahr ist und somit die EingangsXML auf den Ausgang geschrieben wird? Bin doch wenn überhaupt nur Code-Versteher, aber unfähig, das selbst in eine Formel zu packen :-(

            DANKE :-)
            Möchte den Komfort meiner Installation nicht mehr missen!

            Kommentar


              #7
              Steht doch da:
              It returns either index of substring or -1.
              Gruß Matthias
              EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
              - PN nur für PERSÖNLICHES!

              Kommentar


                #8
                Hhm, hilft mir aber noch nicht, die Zeile zusammenzubauen, sorry.

                Aber ich versuche es mal, will es ja "lernen":


                5012|0|"EC[1] and (EN[1].rfind(EN[2]) >= 0)"|"EN[1]"|""|1|0|0|0

                Wenn sich Eingang 1 ändert und in dem Wert von Eingang 1 der Teiltext von Eingang 2 gefunden wird, also ein Index und nicht die -1 zurückkommet (>=0), dann schreibe den Wert von Eingang 1 auf Ausgang 1 raus.

                Richtig so? Klammern und die EN's richtig gesetzt? Oder muss ich das rfind erst mit __import__ irgendwie reinholen (sowas sehe ich in fast allen anderen Bausteinen)?
                Möchte den Komfort meiner Installation nicht mehr missen!

                Kommentar


                  #9
                  Da muss wahrscheinlich ein "__import__('string'). davor. Kann das gerade nicht testen.
                  Gruß Matthias
                  EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                  - PN nur für PERSÖNLICHES!

                  Kommentar


                    #10
                    Aber wo genau vor? Wärest Du wohl so lieb, das in einer ruhigen Minute mal zu testen? Müsste mich jetzt noch in den Logik-Debugger reinfuchsen und da hätte ich wahrscheinlich eher noch mehr Fragen als dass es mir hilft.



                    Möchte den Komfort meiner Installation nicht mehr missen!

                    Kommentar

                    Lädt...
                    X