Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Konversation mit dem BOT via Telegram

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    Konversation mit dem BOT via Telegram

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      fliegema last edited by

      Hallo in die Runde,

      da ich aufgrund der baulichen Begebenheiten kein permanentes Auslesen des Stromzählers automatisieren kann, würde ich dies gerne während des wöchentlichen Waschgangs machen.

      Bis jetzt notiere ich mir den Zählerstand und schreibe diesen manuell in einen Datenpunkt welcher von sourceanalytics aufbereitet wird.

      Bislang habe ich es nur fertig gebracht, entweder:

      • Werte vom iobroker via Telegram zu erhalten (Waschmaschine fertig, Post ist da, usw...)
      • Kommandos zusenden (schalte Licht an, usw.)

      Jetzt würde ich gerne eine halbe Konversation mit dem iobroker via Telegram starten.

      Zum Beispiel:

      • Ich sende Strom2048 --> In diesem Fall wäre 2048 der Zählerstand
      • lasse im Text nach Strom suchen und lass den Rest in den Datenpunkt schreiben
      • iobroker rechnet und schickt mir meinen aktuellen Verbrauch, Kosten, usw.

      Leider komme ich im Blockly, mit dem nach Text suchen, nicht weiter.

      Ich kann zwar nach Strom filtern, habe aber noch nicht verstanden, wie ich den Zählerstand rausnehmen kann. Das in abspeichern in den Datenpunkt und Übersendung der Verbräuche ist klar.

      Hat Jemand eine Idee, wie man dies umsetzen kann?

      Gruss

      bahnuhr 1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active @fliegema last edited by bahnuhr

        @fliegema

        anbei ein kleines Script:

            var vEingabe = getState("telegram.0.communicate.request").val;   // Test Eingabe per telegram auf dem Handy
            var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
            vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
            vEingabe = vEingabe.replace("Strom", ''); 
            log (vEingabe);
        

        Unter vUser hast du zusätzlich noch den User der es gesendet hat.
        Und vEingabe hast du dann den Wert mit dem du weiterarbeiten kannst.

        Bei Blocky bin ich raus.

        F 1 Reply Last reply Reply Quote 1
        • F
          fliegema @bahnuhr last edited by

          @bahnuhr Super Danke Dir, habe es testweise mit meinen 10min JavaScript google Kenntnissen sogar fertig gebracht, es in einem Datenpunkt zu schreiben.

              var vEingabe = getState('telegram.0.communicate.request'/*Last received request*/).val;   // Test Eingabe per telegram auf dem Handy
              var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
              vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
              vEingabe = vEingabe.replace("Strom", ''); 
              setState('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe);
              log (vEingabe);
              console.log (vEingabe);
          

          Leider schreibt er in den Datenpunkt alles was bei Telegram rein kommt. Somit müsste ich erst noch eine If Abfrage rein basteln müssen, dass er nur Werte übernimmt, wenn die lastrequest "Stom" war.

          Da es funktioniert markiere ich es als gelöst, sollte Jemand jedoch bei der Blockly Weise weiterhelfen können, gerne her damit.

          Werde mich dann wohl mal mit Java auseinandersetzen 🙂

          bahnuhr 2 Replies Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @fliegema last edited by

            @fliegema

            dann so:

                var vEingabe = getState('telegram.0.communicate.request'/*Last received request*/).val;   // Test Eingabe per telegram auf dem Handy
                var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
                vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                if (vEingabe.indexOf('Strom') > -1) {
                   vEingabe = vEingabe.replace("Strom", ''); 
                   setState('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe);
                   log (vEingabe);
                   console.log (vEingabe);
                }
            

            Jetzt wird der Wert nur eingetragen, wenn "Strom" im Text enthalten ist !

            1 Reply Last reply Reply Quote 1
            • bahnuhr
              bahnuhr Forum Testing Most Active @fliegema last edited by

              @fliegema

              auch wichtig;
              ae6dc418-04ac-42e7-a903-a2ca62df9e0c-image.png

              1 Reply Last reply Reply Quote 1
              • F
                fliegema last edited by

                @bahnuhr , Geiler Typ!

                Habe noch einen Trigger hinzugefügt, dass er das immer prüft.

                Läuft!

                on('telegram.0.communicate.request'/*Last received request*/, function (obj) {
                    var vEingabe = getState('telegram.0.communicate.request'/*Last received request*/).val;   // Test Eingabe per telegram auf dem Handy
                    var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
                    vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                    if (vEingabe.indexOf('Strom') > -1) {
                       vEingabe = vEingabe.replace("Strom", ''); 
                       setState('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe);
                       log (vEingabe);
                       console.log (vEingabe);
                    }
                });
                

                Darf ich Dich noch belästigen, wie ich diese Warnung zu verstehen habe?

                20:58:11.507	warn	javascript.0 (20713) at Object.<anonymous> (script.js.common.Telegram.00_PowerMeter:7:8)
                
                bahnuhr 1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active @fliegema last edited by

                  @fliegema sagte in Konversation mit dem BOT via Telegram:

                  20:58:11.507 warn javascript.0 (20713) at Object.<anonymous> (script.js.common.Telegram.00_PowerMeter:7:8)

                  Wie hast du den DP angelegt?
                  number oder string ?

                  vEingabe ist ja ein string.
                  Evtl. musst du diesen noch wandeln in eine number !

                  F 1 Reply Last reply Reply Quote 1
                  • F
                    fliegema @bahnuhr last edited by

                    @bahnuhr said in Konversation mit dem BOT via Telegram:

                    @fliegema sagte in Konversation mit dem BOT via Telegram:

                    20:58:11.507 warn javascript.0 (20713) at Object.<anonymous> (script.js.common.Telegram.00_PowerMeter:7:8)

                    Wie hast du den DP angelegt?
                    number oder string ?

                    vEingabe ist ja ein string.
                    Evtl. musst du diesen noch wandeln in eine number !

                    Habe es gepackt, es klappt! Geil!.

                    Jetzt wäre es aber noch super, wenn man den Input prüft, ob dieser größer ist als vorher. Daher dachte ich mir, dass ich eine neue Variable anlegen und gegen diese prüfe, klappt aber scheinbar nicht. Bekomme leider auch keine Fehlermeldung. Denke ich hier zusehr blockly? If AlterWert < vEingabe --> mache weiter. Könntest Du hier bitte nochmal drüber gucken?

                    on('telegram.0.communicate.request'/*Last received request*/, function (obj) {
                        var vEingabe = getState('telegram.0.communicate.request'/*Last received request*/).val;   // Test Eingabe per telegram auf dem Handy
                        var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
                        var vAlterWert;
                        vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                        if (vAlterWert < vEingabe) {
                            if (vEingabe.indexOf('Strom') > -1) {
                                vEingabe = vEingabe.replace("Strom", ''); 
                                setObject('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe);
                                vAlterWert = vEingabe;
                                // log (vEingabe);
                                console.log ("Aktueller Wert: "+ vEingabe);
                                console.log ("Alter Wert: "+ vAlterWert);
                                }
                            }
                    });
                    
                    bahnuhr 1 Reply Last reply Reply Quote 0
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @fliegema last edited by bahnuhr

                      @fliegema

                      Du hast vAlterWert zugewiesen wenn der neue Wert geschrieben werden soll. Dieser wird aber nicht behalten.
                      Heißt: Beim nächsten Durchlauf ist valter... = 0

                      du musst den alten Wert am Anfang holen per getState.
                      Also so:

                      on('telegram.0.communicate.request'/*Last received request*/, function (obj) {
                          var vAlterWert =  getState('0_userdata.0.00_Powertest').val;
                          var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));    
                          var vEingabe = obj.state.val;    //ist einfacher als der alte Text !
                          vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                          vEingabe_wert = vEingabe.replace("Strom", ''); 
                              if (vEingabe.indexOf('Strom') > -1  && vEingabe_wert > vAlterWert) {
                                  setObject('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe_wert);
                                  log ("Aktueller Wert: "+ vEingabe_wert);
                                  log ("Alter Wert: "+ vAlterWert);
                                  }
                      });
                      

                      Jetzt wird der neue Wert nur geschrieben wenn er größer ist als der alte gespeicherte!

                      F 1 Reply Last reply Reply Quote 1
                      • F
                        fliegema @bahnuhr last edited by

                        @bahnuhr said in Konversation mit dem BOT via Telegram:

                        @fliegema

                        Du hast vAlterWert zugewiesen wenn der neue Wert geschrieben werden soll. Dieser wird aber nicht behalten.
                        Heißt: Beim nächsten Durchlauf ist valter... = 0

                        du musst den alten Wert am Anfang holen per getState.
                        Also so:

                        on('telegram.0.communicate.request'/*Last received request*/, function (obj) {
                            var vAlterWert =  getState('0_userdata.0.00_Powertest').val;
                            var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));    
                            var vEingabe = obj.state.val;    //ist einfacher als der alte Text !
                            vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                            vEingabe_wert = vEingabe.replace("Strom", ''); 
                                if (vEingabe.indexOf('Strom') > -1  && vEingabe_wert > vAlterWert) {
                                    setObject('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe_wert);
                                    log ("Aktueller Wert: "+ vEingabe_wert);
                                    log ("Alter Wert: "+ vAlterWert);
                                    }
                        });
                        

                        Jetzt wird der neue Wert nur geschrieben wenn er größer ist als der alte gespeicherte!

                        Guten Morgen,

                        leider haut das nicht hin.

                        Kann es sein, dass die Variable vEingabe_wert nicht initialisiert ist?

                        Selbst wenn ich diese aber in Zeile 6 erstelle, klappt es nicht. Bekomme als Fehler nur den Number/String Fehler:

                        on('telegram.0.communicate.request'/*Last received request*/, function (obj) {
                            var vAlterWert =  getState('0_userdata.0.00_Powertest'/*00 Powertest*/).val;
                            var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));    
                            var vEingabe = obj.state.val;    //ist einfacher als der alte Text !
                            vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length);
                            var vEingabe_wert = vEingabe.replace("Strom", ''); 
                                if (vEingabe.indexOf('Strom') > -1  && vEingabe_wert > vAlterWert) {
                                    setObject('0_userdata.0.00_Powertest'/*00 Powertest*/,vEingabe_wert);
                                    log ("Aktueller Wert: "+ vEingabe_wert);
                                    log ("Alter Wert: "+ vAlterWert);
                                    }
                        });
                        
                        09:52:22.065	error	javascript.0 (5205) at Object.<anonymous> (script.js.common.Telegram.00_PowerMeter:3:26)
                        

                        Selbst wenn ich in Zeile 2 get State auf getObject ändere klappt es nicht:

                        var vAlterWert =  getObject('0_userdata.0.00_Powertest'/*00 Powertest*/).val;
                        

                        Im datenpunkt ist gerade der Wert manuell gesetzt: 2580, per Telegram sende ich 3000

                        Komme leider nicht weiter.

                        bahnuhr 1 Reply Last reply Reply Quote 0
                        • bahnuhr
                          bahnuhr Forum Testing Most Active @fliegema last edited by

                          @fliegema

                          Anydesk ?

                          F 1 Reply Last reply Reply Quote 1
                          • F
                            fliegema @bahnuhr last edited by

                            @bahnuhr said in Konversation mit dem BOT via Telegram:

                            @fliegema

                            Anydesk ?

                            Ich versuche erst nochmal mit Google die Java Kenntnisse zu erweitern, und melde mich nochmal. Danke Dir schon mal fürs Angebot.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            818
                            Online

                            32.1k
                            Users

                            80.6k
                            Topics

                            1.3m
                            Posts

                            2
                            12
                            410
                            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