Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Werte per Telegram an iobroker senden

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Werte per Telegram an iobroker senden

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

      Guten Tag,
      ich baue gerade ein Script das den taschengeldkontostand meiner Kids visualisiert, damit sie nicht ständig überall ihr Taschengeld im Haus rumfliegen haben.
      Dieser Wert wird im Panel dargestellt. Wöchentlich wird eine paremetrierbare Summe inkrementiert.
      Ich brauche Allerdings noch eine Möglichkeit außer der Reihe Geld einzuzahlen, wenn sie beispielsweise Rasen mähen oder Geld abzuheben.
      Aufgrund der kriminellen Energie möchte ich dies aber nicht in einer VIS machen sondern via Telegram Bot. Bisher nutze ich textcommand schon intensiv mit zahlreichen Funktionen, hier aber immer nur mit Schlüsselworten.

      Gibt es eine Möglichkeit, ein Schlüsselwort gefolgt von einem variabel eisntellbaren Wert zu senden, der dann in ein Objekt geschrieben wird? Auf dieses Objekt schaut ein Trigger der dann aufaddiert und zurücksetzt.

      LG
      Nils

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

        @jmeister79

        Wenn du am Handy in telegram etwas eingibst, dann erscheint dies in einem DP in iob.
        Und diesen DP kannst du doch dann auswerten.

        jmeister79 1 Reply Last reply Reply Quote 1
        • jmeister79
          jmeister79 @bahnuhr last edited by

          Hi,
          mit
          Schreibe Text in zustand
          geht es. Aber er erkennt kein - zeichen. da muss ich mal n bisschen rumprobieren.

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

            @jmeister79

            habe eben ein bisschen gespielt:

                var vEingabe = getState("telegram.0.communicate.request").val;
                var vUser = vEingabe.substring(1, vEingabe.indexOf("]"));
                log (vUser);
                var text = vEingabe.substring(vEingabe.indexOf("]")+1, vEingabe.length );
                log (text);
            
                var arr = text.split(",");
                log (arr[0]);
                var wert = parseFloat(arr[1])
                log (typeof wert)
            

            Schau dir mal das Script an.
            Wenn du in telegram z.B. eingibst: rasen,10
            dann hat die Variable vUser den Namen der gesendet hat.
            Und in arr0 bekommst du rasen
            und in wert den Wert.

            Musst halt noch umwandeln und ein paar if einbauen je nachdem was du machen willst.

            1 Reply Last reply Reply Quote 1
            • jmeister79
              jmeister79 last edited by jmeister79

              Hi, ich habs jetzt so gelöst.

              Danke dir Bahnuhr:

              on({id: 'telegram.0.communicate.request', change: "any"}, async function (obj) {
              
                  var vEingabe = getState("telegram.0.communicate.request").val;
                  var text = vEingabe.substring(vEingabe.indexOf("]")+1, vEingabe.length );
              
                  var arr = text.split(",");
                  var wert = parseFloat(arr[1])
                  if (arr[0] == 'Lieblingskind' || arr[0] == 'Schwarzschaf'){
                      var newvalue = getState('javascript.0.Taschengeld.'+arr[0]+'Abs').val + wert; 
                      setState('javascript.0.Taschengeld.'+arr[0]+'Abs', (parseFloat(newvalue)));	//neue summe übertragen  
                      text = 'Es wurden '+wert+'€ zu '+arr[0]+' addiert.'
                      sendTo("telegram", "send", {
                          text: text});       
                  }
              });
              
              B 1 Reply Last reply Reply Quote 1
              • B
                booleeny @jmeister79 last edited by

                @jmeister79 Bist du hier noch aktiv im Forum? Könntest du das "Taschengeld"-Script veröffentlichen? Oder auch gerne jemand anderes, ich bin bestimmt nicht der einzige der danach sucht oder so etwas realisieren möchte.

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

                  @booleeny sagte in Werte per Telegram an iobroker senden:

                  Könntest du das "Taschengeld"-Script veröffentlichen?

                  He ??

                  Steht doch 1 Beitrag über deinem.

                  B 1 Reply Last reply Reply Quote 0
                  • B
                    booleeny @bahnuhr last edited by

                    @bahnuhr Das is doch nur der "Telegram" Part. Ich dachte es gibt noch ein größeres Skript um das mit den Kontoständen zu realisieren. Ok vielleicht habe ich auch zu kompliziert gedacht. Wenn es nur ein Wert ist, der sich per Telegram editieren lässt hast du recht. Durch die zwei genannten Kinder und die Aktivitäten, dachte ich es gibt auch ein Log. Naja ich habe es nun soweit hingebastelt, dass Kontostände in der Vis angezeigt werden, Beträge abgehoben und eingezahlt werden können und es ein Log dazu gibt. Wenn das läuft und hübsch ist poste ich das.

                    1 Reply Last reply Reply Quote 0
                    • jmeister79
                      jmeister79 last edited by jmeister79

                      @booleeny bin hier nicht mehr aktiv, da ich anfang des Jahres auf ein anderes System migriert bin. Ich habe leider den ioBriker auch auf irgend einem Image liegen, sber eigentlich ist die snzeige und die wöchentliche inkrementation um einen parametrierbaren wert trivial.
                      Ich hab das hoer im HA auch genau so realisiert.

                      Du brauchst n Script dass an einem bestimmten termin per crontab einfach die summe nimmt und dann den Taschengeldwert aufaddiert.

                      Das einstellen in vis o.ä. ist dann dort vorzunehmen. Sind leider viele verzweigte scripte...

                      1 Reply Last reply Reply Quote 0
                      • B
                        booleeny last edited by

                        Falls es jemanden interessiert ist hier ein Taschengeld Script:

                        Javascript:

                        // Taschengeld-Verwaltung mit wöchentlicher Gutschrift + VIS-Steuerung
                        // Stand: November 2025
                        // Anpassungen: 24h-Zeit ohne Sekunden + HTML-Log-Tabelle + nur 20 letzte Einträge
                        
                        const kinder = {
                            Alrik: {
                                konto: '0_userdata.0.Taschengeld.Alrik.Konto',
                                einzahlung: '0_userdata.0.Taschengeld.Alrik.Einzahlung',
                                auszahlen: '0_userdata.0.Taschengeld.Alrik.Auszahlung',
                                btn_einzahlen: '0_userdata.0.Taschengeld.Alrik.Einzahlen',
                                btn_auszahlen: '0_userdata.0.Taschengeld.Alrik.Auszahlen',
                                woechentlich: '0_userdata.0.Taschengeld.Alrik.Woechentlich',
                                log: '0_userdata.0.Taschengeld.Alrik.Log'
                            },
                            Theda: {
                                konto: '0_userdata.0.Taschengeld.Theda.Konto',
                                einzahlung: '0_userdata.0.Taschengeld.Theda.Einzahlung',
                                auszahlen: '0_userdata.0.Taschengeld.Theda.Auszahlung',
                                btn_einzahlen: '0_userdata.0.Taschengeld.Theda.Einzahlen',
                                btn_auszahlen: '0_userdata.0.Taschengeld.Theda.Auszahlen',
                                woechentlich: '0_userdata.0.Taschengeld.Theda.Woechentlich',
                                log: '0_userdata.0.Taschengeld.Theda.Log'
                            }
                        };
                        
                        // 🧾 Logik: Eintrag im Log speichern (HTML-Tabelle, 24h-Zeit, max. 20 Einträge)
                        function logEintrag(kind, betrag, art) {
                            const datum = new Date().toLocaleString('de-DE', {
                                year: 'numeric',
                                month: '2-digit',
                                day: '2-digit',
                                hour: '2-digit',
                                minute: '2-digit',
                                hour12: false
                            });
                        
                            const logPfad = kinder[kind].log;
                            let aktuellesLog = getState(logPfad).val || '';
                        
                            // Wenn noch keine Tabelle existiert → Grundstruktur erzeugen
                            if (!aktuellesLog.includes('<table')) {
                                aktuellesLog = `
                                <table style="width:100%; border-collapse:collapse; font-family:Arial; font-size:12px;" border="1">
                                    <thead style="background:#ddd;">
                                        <tr>
                                            <th style="padding:4px;">Datum</th>
                                            <th style="padding:4px;">Art</th>
                                            <th style="padding:4px;">Betrag</th>
                                        </tr>
                                    </thead>
                                    <tbody></tbody>
                                </table>`;
                            }
                        
                            // Neue Tabellenzeile (neueste Einträge oben)
                            const neueZeile = `
                                <tr>
                                    <td style="padding:4px;">${datum}</td>
                                    <td style="padding:4px;">${art}</td>
                                    <td style="padding:4px; text-align:right;">${betrag.toFixed(2)} €</td>
                                </tr>`;
                        
                            // Neue Zeile am Anfang des Tabellenkörpers einfügen
                            aktuellesLog = aktuellesLog.replace(/(<tbody>)/, `$1${neueZeile}`);
                        
                            // Nur die letzten 20 Einträge behalten
                            const tbodyInhalt = aktuellesLog.match(/<tbody>([\s\S]*?)<\/tbody>/);
                            if (tbodyInhalt) {
                                const alleZeilen = tbodyInhalt[1].match(/<tr>[\s\S]*?<\/tr>/g) || [];
                                const begrenzteZeilen = alleZeilen.slice(0, 20); // Nur die ersten 20 behalten (neueste zuerst)
                                const neuerTbody = "<tbody>" + begrenzteZeilen.join("") + "</tbody>";
                                aktuellesLog = aktuellesLog.replace(/<tbody>[\s\S]*?<\/tbody>/, neuerTbody);
                            }
                        
                            setState(logPfad, aktuellesLog);
                        }
                        
                        // 🕗 Wöchentliche Auszahlung (Sonntag 08:00 Uhr)
                        schedule("0 8 * * 0", () => {
                            for (const kind in kinder) {
                                const kontoPfad = kinder[kind].konto;
                                const betragPfad = kinder[kind].woechentlich;
                                const betrag = parseFloat(getState(betragPfad).val) || 0;
                                const standAlt = parseFloat(getState(kontoPfad).val) || 0;
                                const standNeu = standAlt + betrag;
                        
                                setState(kontoPfad, standNeu);
                                logEintrag(kind, betrag, "Wöchentliche Gutschrift");
                            }
                        });
                        
                        // 💰 Einzahlung per Button
                        for (const kind in kinder) {
                            on({ id: kinder[kind].btn_einzahlen, change: 'ne' }, () => {
                                const betrag = parseFloat(getState(kinder[kind].einzahlung).val);
                                if (isNaN(betrag) || betrag <= 0) return;
                        
                                const konto = kinder[kind].konto;
                                const stand = parseFloat(getState(konto).val) || 0;
                        
                                setState(konto, stand + betrag);
                                logEintrag(kind, betrag, "Manuelle Einzahlung");
                        
                                // Reset
                                setState(kinder[kind].einzahlung, 0);
                                setState(kinder[kind].btn_einzahlen, false);
                            });
                        }
                        
                        // 💸 Auszahlung per Button
                        for (const kind in kinder) {
                            on({ id: kinder[kind].btn_auszahlen, change: 'ne' }, (obj) => {
                                const btnStatus = obj.state.val;
                                if (btnStatus !== true) return; // Nur reagieren, wenn Button gedrückt (true)
                        
                                const betrag = parseFloat(getState(kinder[kind].auszahlen).val);
                                const konto = kinder[kind].konto;
                                const stand = parseFloat(getState(konto).val) || 0;
                        
                                if (isNaN(betrag) || betrag <= 0 || betrag > stand) {
                                    console.warn(`[Taschengeld] Ungültiger Auszahlungsbetrag für ${kind}: ${betrag}`);
                                    setState(kinder[kind].btn_auszahlen, false);
                                    return;
                                }
                        
                                setState(konto, stand - betrag);
                                logEintrag(kind, betrag, "Auszahlung");
                        
                                // Reset
                                setState(kinder[kind].auszahlen, 0);
                                setState(kinder[kind].btn_auszahlen, false);
                            });
                        }
                        

                        Objekte unter 0_userdata 0 anlegen:
                        2025-11-02 21_17_02-Clipboard.png

                        Hier eine vis-2:
                        2025-11-02 21_20_28-Clipboard.png

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.2k
                        Online

                        32.4k
                        Users

                        81.2k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        724
                        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