Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [Projekt] Integr. Cubinote - Alexa Sprache drucken - Listen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Projekt] Integr. Cubinote - Alexa Sprache drucken - Listen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Agria4800
      Agria4800 @Sebastian IO last edited by

      @sebastian-io: Na das nenne ich mal komfortabel 🙂 Überragend 👏 👍
      Danke dir für die wirklich gute Erklärung und das teilen deiner Scripte.
      Ich habe mal alles vorbereitet und werde es testen, sobald ich daheim bin.

      Eine Frage noch: Aktuell druckst du nur die Shopping / Todo aus der .json;
      Ist es auch möglich einen Text aus dem Datenpunkt zu drucken, oder muss / soll ich erst eine DP json erzeugen und diesen dann drucken ? Wahrscheinlich ist es aber egal, ich könnte doch jeden beliebigen DP angeben, oder ?

      Grüße und 🤝

      Sebastian IO 1 Reply Last reply Reply Quote 0
      • Sebastian IO
        Sebastian IO @Agria4800 last edited by

        @agria4800 klar kannst du text aus einem Datenpunkt drucken!

        DP: 0_userdata.0.cubinote.Notizen.notizenText

        const moment = require('moment');
        var aApiSettings = {
            //Echo Sprachausgabe
            'echodevice': 'YOUR ECHO DEVICE',
            'url': getState("0_userdata.0.cubinote.apiurl").val,
            'action': {
                'print': 'printpaper',
                'devicestatus': 'getdeviceinfo',
                'printstatus': 'getprintstat',
                'requestbind': 'requestbind',
                'requestbindstatus': 'getbindrequeststatus'
            },
            'appid': '?appID=' + getState("0_userdata.0.cubinote.appid").val,
            'accesskey': '&ak=' + getState("0_userdata.0.cubinote.accesskey").val,
            'deviceid': '&deviceID=' + getState("0_userdata.0.cubinote.deviceid").val,
            'bindid': '&bindID=' + getState("0_userdata.0.cubinote.bindid").val,
            'userid': '&useridentifying' + getState("0_userdata.0.cubinote.userid").val,
            'liststates': {
                '0_userdata.0.cubinote.actionStates.print_shoppinglist_state': 'alexa2.0.Lists.SHOPPING_LIST.json',
                '0_userdata.0.cubinote.actionStates.print_todolist_state': 'alexa2.0.Lists.TO_DO.json'
            }
        }
        
        on({ id: '0_userdata.0.cubinote.Notizen.notizenText', change: "ne" }, function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
        
            if (getState('0_userdata.0.cubinote.Notizen.notizenText').val !== '') {
                moment.locale('de');         // de
                var TimeStamp = moment().format('YYYY-MM-DD hh:mm:ss');
                var sTimestamp = '&timestamp=' + TimeStamp;
                var apiUrl = aApiSettings.url + aApiSettings.action.print + aApiSettings.appid + aApiSettings.accesskey + sTimestamp + aApiSettings.deviceid + aApiSettings.bindid;
                apiUrl += '&printcontent=T:';
        
                //getText
                var printList = getState('0_userdata.0.cubinote.Notizen.notizenText').val;
                printList = printList.replace(/<br>/gi, '');
                printList = printList.replace(/#br#/gi, '\n');
                printList = printList.replace(/Ä/g, 'Ae');
                printList = printList.replace(/ä/g, 'ae');
                printList = printList.replace(/Ö/g, 'Oe');
                printList = printList.replace(/ö/g, 'oe');
                printList = printList.replace(/Ü/g, 'Ue');
                printList = printList.replace(/ü/g, 'ue');
                printList = printList.replace(/ß/g, 'ss');
        
                var base64 = new Buffer(printList).toString('base64');
                apiUrl += base64;
        
                //console.log(apiUrl);
                const request = require('request');
                request({ 'uri': apiUrl, method: 'POST' }, function (error, response, json) {
                    if (!error && response.statusCode === 200) {
        
                        var aReturn = JSON.parse(json);
                        //{"showapi_res_code":1,"showapi_res_error":"ok","result":2,"printcontentid":52476}
                        if (aReturn.result == 2) {
                            var statusUrl = aApiSettings.url + aApiSettings.action.printstatus + aApiSettings.appid + aApiSettings.accesskey + sTimestamp;
                            statusUrl += '&printcontentid=' + aReturn.printcontentid;
        
                            request({ 'uri': statusUrl }, function (err, resp, jsonStatus) {
                                //{"showapi_res_code":1,"showapi_res_error":"ok","printflag":1,"printcontentid":52476}
                                var outputDevice = aApiSettings.echodevice;
                               setState(outputDevice + ".Commands.speak", '30; Drucken erfolgreich');
                               });
                        }
                    }
                });
                setStateDelayed('0_userdata.0.cubinote.Notizen.notizenText', '', 2000, false);
            }
        
        
        });
        
        

        Und nun musst du nur noch den Datenpunkt befüllen und sobald der Datenpunkt befüllt wude, wird dieser gedruckt und danach wieder geleert.

        Agria4800 1 Reply Last reply Reply Quote 0
        • Agria4800
          Agria4800 @Sebastian IO last edited by

          @sebastian-io: ach ja, ein Traum...😊
          ich habe alles super umsetzten können und noch ein feines addon:
          Ich sage Alexa einen Text und der Drucker druckt es... --> Alexa, sprich mir nach...und direkt danach den zu druckenden Text!

          Ich teile mal das Script, ich glaube, dass könnte einige interessieren...
          da ich kein JS Experte bin, mehr so durch try and error, ist es nicht schön, aber funktionieren tut´s 🙂 Vielleicht kannst du ja mal ein update drüber schieben, deine scripte sind ja vom feinsten 👍 😊

          // DP erstellen
          createState('0_userdata.0.cubinote.Alexa.SprachText','Test Text Druck',{name:'Alexa sendet Text an Drucker',type:"string",role:"value"});
          
          // Alexa Sprachtext füllt DP 0_userdata.0.cubinote.Alexa.SprachText
          var result;
          on({id: "alexa2.0.History.summary"/*summary*/, change: "ne"}, async function (obj) {
           var value = obj.state.val;
           var oldValue = obj.oldState.val;
           if (getState("alexa2.0.History.summary").val == getState("alexa2.0.History.summary").val.indexOf('sprich mir nach') + 1 && getState("alexa2.0.History.answerText").val != getState("alexa2.0.History.answerText").val.indexOf('Wenn ich etwas nachsprechen soll') + 1) {
             setStateDelayed("0_userdata.0.cubinote.Alexa.SprachText"/*Alexa.SprachText*/, getState("alexa2.0.History.answerText").val, 10, false);
             result = getState("alexa2.0.History.answerText").val;
             console.warn(result);
             }
          });
          
          
          
          
          // DP 0_userdata.0.cubinote.Alexa.SprachText drucken
          const moment = require('moment');
          var aApiSettings = {
             //Echo Sprachausgabe
             'echodevice': 'alexa2.0.Echo-Devices.XXX', // bitte hier dein Device eintragen
             'url': getState("0_userdata.0.cubinote.apiurl").val,
             'action': {
                 'print': 'printpaper',
                 'devicestatus': 'getdeviceinfo',
                 'printstatus': 'getprintstat',
                 'requestbind': 'requestbind',
                 'requestbindstatus': 'getbindrequeststatus'
             },
             'appid': '?appID=' + getState("0_userdata.0.cubinote.appid").val,
             'accesskey': '&ak=' + getState("0_userdata.0.cubinote.accesskey").val,
             'deviceid': '&deviceID=' + getState("0_userdata.0.cubinote.deviceid").val,
             'bindid': '&bindID=' + getState("0_userdata.0.cubinote.bindid").val,
             'userid': '&useridentifying' + getState("0_userdata.0.cubinote.userid").val,
             'liststates': {
                 '0_userdata.0.cubinote.actionStates.print_shoppinglist_state': 'alexa2.0.Lists.SHOPPING_LIST.json',
                 '0_userdata.0.cubinote.actionStates.print_todolist_state': 'alexa2.0.Lists.TO_DO.json'
             }
          }
          
          on({ id: '0_userdata.0.cubinote.Alexa.SprachText', change: "ne" }, function (obj) {
             var value = obj.state.val;
             var oldValue = obj.oldState.val;
          
             if (getState('0_userdata.0.cubinote.Alexa.SprachText').val !== '') {
                 moment.locale('de');         // de
                 var TimeStamp = moment().format('YYYY-MM-DD hh:mm:ss');
                 var sTimestamp = '&timestamp=' + TimeStamp;
                 var apiUrl = aApiSettings.url + aApiSettings.action.print + aApiSettings.appid + aApiSettings.accesskey + sTimestamp + aApiSettings.deviceid + aApiSettings.bindid;
                 apiUrl += '&printcontent=T:';
          
                 //getText
                // var //printList = getState('0_userdata.0.cubinote.Alexa.SprachText').val;
                // var    printList = 'Empfangen am: '+TimeStampList+'\n\r';
                //     printList += '================================\n\n\r';
                //     printList += getState('0_userdata.0.cubinote.Alexa.SprachText').val;
          var printList = '';
                 var TimeStampList = moment().format('DD.MM.YYYY HH:mm');{
                     printList = 'Empfangen am: '+TimeStampList+'\n\r';
                     printList += '================================\n\n\r';
                     printList += getState('0_userdata.0.cubinote.Alexa.SprachText').val;
                  
                 }
          
                 printList = printList.replace(/<br>/gi, '');
                 printList = printList.replace(/#br#/gi, '\n');
                 printList = printList.replace(/Ä/g, 'Ae');
                 printList = printList.replace(/ä/g, 'ae');
                 printList = printList.replace(/Ö/g, 'Oe');
                 printList = printList.replace(/ö/g, 'oe');
                 printList = printList.replace(/Ü/g, 'Ue');
                 printList = printList.replace(/ü/g, 'ue');
                 printList = printList.replace(/ß/g, 'ss');
          
                 var base64 = new Buffer(printList).toString('base64');
                 apiUrl += base64;
          
                 //console.log(apiUrl);
                 const request = require('request');
                 request({ 'uri': apiUrl, method: 'POST' }, function (error, response, json) {
                     if (!error && response.statusCode === 200) {
          
                         var aReturn = JSON.parse(json);
                         //{"showapi_res_code":1,"showapi_res_error":"ok","result":2,"printcontentid":52476}
                         if (aReturn.result == 2) {
                             var statusUrl = aApiSettings.url + aApiSettings.action.printstatus + aApiSettings.appid + aApiSettings.accesskey + sTimestamp;
                             statusUrl += '&printcontentid=' + aReturn.printcontentid;
          
                             request({ 'uri': statusUrl }, function (err, resp, jsonStatus) {
                                 //{"showapi_res_code":1,"showapi_res_error":"ok","printflag":1,"printcontentid":52476}
                                 var outputDevice = aApiSettings.echodevice;
                               setState(outputDevice + ".Commands.speak", 'Druck erfolgreich');
                              //   setState(outputDevice + ".Commands.speak-volume", '30');
                                });
                         }
                     }
                 });
             //    setStateDelayed('0_userdata.0.cubinote.Alexa.SprachText', '', 2000, false);
             }
          
          
          });
          
          
          
          

          2-3 Punkte noch: 😁

          • Weisst du, ob und wie man noch die Schriftgröße variieren könnte ?
          • Ein Bild (Icon) senden wäre natürlich auch noch sehr nice... (vielleicht aus dem Vis.0 Ordner...da liegen einige)
          • Hast du in Vis was visualisiert ? Texteingabe oder ähnliches ?
          Sebastian IO 2 Replies Last reply Reply Quote 0
          • M
            mcchickents last edited by

            Guten Abend,

            habe ich auch mal daran getraut.
            Habe nun folgendes Problem. Wenn ich den Button 0_userdata.0.cubinote.actionStates.write_binding_state drücke. Druckt mein Drucker App Name Developer Verification Code. Die Alexa sagt das die verbindung steht.
            Wenn ich nun aber den Staus von 0_userdata.0.cubinote.actionStates.check_binding_state auf true setze. Sagt die Alexa das keine Verbindung besteht. Wo könnte hier der fehler liegen?

            Gruss Julian

            Sebastian IO 1 Reply Last reply Reply Quote 0
            • Sebastian IO
              Sebastian IO @mcchickents last edited by

              @mcchickents Guten Morgen,
              wurde die bindid in den korrekten Datenpunkt geschrieben? Denn für die weiteren Aufrufe wird die bindid benötigt.

              M 1 Reply Last reply Reply Quote 0
              • Sebastian IO
                Sebastian IO @Agria4800 last edited by Sebastian IO

                @agria4800

                Guten Morgen,

                zu Punkt Schriftgröße, nein ist leider nicht möglich, habe extra deswegen auch den support von cubinote angeschrieben.
                zu Punkt Bild, ist prinzipiell möglich, jedoch muss das bild in 1-bit monochrom sein und danach base64 encoded werden, ich habe es bis dato noch nicht zum Laufen bekommen, vielleicht hast du mehr Glück und Ausdauer für das Problem.
                zu Punkt Visualisierung, ja habe ich in Jarvis umgesetzt.
                screen-print-jarvis.png

                VG

                1 Reply Last reply Reply Quote 0
                • M
                  mcchickents @Sebastian IO last edited by

                  @sebastian-io Guten Morgen, ja er schreibt schön die bindid in die Variable, wenn ich write_binding auslöse. Muss ich vieleicht noch irgentwo den Verification Code den er ausdruck in eine variable eintragen?

                  Gruss Julian

                  Sebastian IO 1 Reply Last reply Reply Quote 0
                  • Sebastian IO
                    Sebastian IO @mcchickents last edited by

                    @mcchickents kann es sein dass du die normale installation für den cubinote noch nicht gemacht hast, soviel ich mich erinnere musste doch dieser Verification Code bei der Erstinstallation angegeben werden, sprich Aufnahme ins Wlan und in die Handy App?

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      mcchickents @Sebastian IO last edited by

                      @sebastian-io Hi ich habe beim einrichten der App leider keinen code benötigt. Die App (Ios) funktioniert aber einwandfrei. Ich kann hier Bilder sowie Texte drucken.

                      Gruss Julian

                      Agria4800 1 Reply Last reply Reply Quote 0
                      • Agria4800
                        Agria4800 @mcchickents last edited by

                        @mcchickents: führe mal das bitte deine Daten eintragen bei XXX aus...

                        http://api.cubinote.com/home/requestbind?appID=XXX&ak=XXX&timestamp=2014-11-14%2014:22:39&deviceID=XXX&useridentifying=XXX
                        

                        App id siehst du nach dem einloggen bei

                        https://developer.cubinote.com 
                        
                        M 1 Reply Last reply Reply Quote 0
                        • M
                          mcchickents @Agria4800 last edited by

                          @agria4800
                          Danke für eure unterstüzung.

                          Habe die URL ausgeführt.
                          Als User ID habe ich die 6 Stellige nummer aus der App genommen ist das richtig?

                          Als Antwort habe ich das erhalten:
                          {"showapi_res_code":1,"showapi_res_error":"ok","showapi_devicetype":602,"showapi_bindid":807xxx} bindid ist gleich wie im Iobroker

                          Gruss Julian

                          Agria4800 1 Reply Last reply Reply Quote 0
                          • Agria4800
                            Agria4800 @mcchickents last edited by Agria4800

                            @mcchickents: und geht es jetzt?
                            Hier mal ein Bild bezüglich der App Id, wo diese zu finden ist
                            2FCFC246-975B-4554-88C5-D00A2F2E22F2.jpeg

                            Falls du noch Hilfe brauchst, melde dich!

                            M 1 Reply Last reply Reply Quote 0
                            • Sebastian IO
                              Sebastian IO @Agria4800 last edited by

                              @agria4800 danke für den coolen Tip,
                              hab es jetzt für mich angepasst sodass es mit dem DP 0_userdata.0.cubinote.Notizen.notizenText zusammenarbeitet,
                              hier ist ja auch schon das parsing für umlaute integriert und setzt den Text automatisch zurück!

                              on({id: "alexa2.0.History.answerText", change: "ne"}, async function (obj) {
                              
                              
                               if (getState("alexa2.0.History.summary").val.indexOf('sprich mir nach') !== -1 && getState("alexa2.0.History.answerText").val.indexOf('Wenn ich etwas nachsprechen') === -1 ) {
                              
                                  setStateDelayed('0_userdata.0.cubinote.Notizen.notizenText', getState("alexa2.0.History.answerText").val, 1000, false);
                                 }
                              
                              });
                              
                              Agria4800 1 Reply Last reply Reply Quote 0
                              • M
                                mcchickents @Agria4800 last edited by mcchickents

                                @agria4800 Nein geht leider nicht gleiches Verhalten 🙁

                                Frage wenn ihr den Button 0_userdata.0.cubinote.actionStates.write_binding_state aktiviert druckt euer drucker dann auch zweimal hintereinader APP name: xxxxx Developer: xxxx Verification Code: xxx aus?

                                gruss Julian

                                Sebastian IO 1 Reply Last reply Reply Quote 0
                                • Sebastian IO
                                  Sebastian IO @mcchickents last edited by Sebastian IO

                                  @mcchickents hast du alle scripte von mir eingebunden? Sind alle Datenpunkte vorhanden? Kannst du den Status des cubinotes abfragen oder drucken?

                                  Deine appid darf max 3 oder 4-stellig sein, deine deviceid sollte aus buchstaben und zahlen bestehen und ungefähr 16 Zeichen lang sein und deine userid sollte dein Benutzername sein!

                                  M 1 Reply Last reply Reply Quote 0
                                  • M
                                    mcchickents @Sebastian IO last edited by

                                    @sebastian-io

                                    ich denke schon das ich alles übernommen habe? anbei mal zwei bilder

                                    d83c0b9e-bcaf-4568-b072-7620e366e3b4-image.png

                                    ac8589a7-e308-4df8-9e6e-b6563f6644af-image.png

                                    Sebastian IO 1 Reply Last reply Reply Quote 0
                                    • Sebastian IO
                                      Sebastian IO @mcchickents last edited by Sebastian IO

                                      @mcchickents ich glaube es liegt an deiner userid, das wording ist verwirrend aber da muss der username eingetragen sein!

                                      Den Usernamen findest du in deiner app im Profil, direkt unter deinem Bild!

                                      M 1 Reply Last reply Reply Quote 0
                                      • M
                                        mcchickents @Sebastian IO last edited by

                                        @sebastian-io userid habe ich geändert will leider immer noch nicht. Was mir aber aufgefallen ist. Wenn ich den user namen in der url ändere.

                                        http://api.cubinote.com/home/requestbind?appID=XXX&ak=XXX&timestamp=2014-11-14 14:22:39&deviceID=XXX&useridentifying=XXX

                                        verändert sich der Verification code auf dem ausdruck.

                                        Wenn ich jedoch im Iobroker den eintrag ändere bleibt der verification code gleich?

                                        Gruss Julian

                                        Sebastian IO 1 Reply Last reply Reply Quote 0
                                        • Sebastian IO
                                          Sebastian IO @mcchickents last edited by

                                          @mcchickents ich habe das jetzt auch mal direkt in der url eingegeben und als rückgabe im Browser bekomme ich als json format folgende Ausgabe:

                                          showapi_res_code	1
                                          showapi_res_error	"ok"
                                          showapi_devicetype	602
                                          showapi_bindid	807927
                                          

                                          Und der Drucker printet:
                                          App name: iobroker-cubinote
                                          Developer: sebastian_io
                                          Verification-Code: .....

                                          Bei dir müsste also dein App Name, Developer etc drin stehen und wenn du das über iobroker machst und den Datenpunkt 0_userdata.0.cubinote.actionStates.check_binding_state auf true setzt, dann sollte eine Sprachausgabe über deine ausgewählte alexa kommen, aber ohne Ausdruck!

                                          M G 2 Replies Last reply Reply Quote 0
                                          • M
                                            mcchickents @Sebastian IO last edited by

                                            @sebastian-io

                                            das funktioniert schon ich bekomme nur immer von der netten alexa gesagt verbindungsstatus nicht erfolgreich^^

                                            wenn ich write_binding_state drücke, druckt der drucker zweimal hintereinder und alexa sagt verbindung erfolgreich.

                                            Interresanter weiße stehen auf den ausdrucken aber unterschiedliche sachen. als würde er im iobroker den user namen nicht verwenden.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            963
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            65
                                            5408
                                            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