NEWS
[Problem] Dream btw. Enigma2 Adapter
-
Ja, ist wohl ein bekanntes Problem.
Hier wurde das auch schon mal gepostet:
https://board.newnigma2.to/wbb4/index.p … hen-nicht/
Ich hatte es aber mal über einen Code hinbekommen und melde mich wenn ich das wieder gefunden habe.
-
So, gefunden, mit dem Befehl
http://IP-Dreambox/web/remotecontrol?command=207&rcu=advanced
kann ich Pause ausführen und bei erneuter Ausführung weiterführen
Also habe ich mal im Button Script geschaut und die Zeile 281
require("request")((['http://',USER,':',PW,'@',IP,':',PORT,'/web/remotecontrol?command=',164].join(''))).on("error", function (e) {console.error(e);});
in
require("request")((['http://',USER,':',PW,'@',IP,':',PORT,'/web/remotecontrol?command=207&rcu=advanced'].join(''))).on("error", function (e) {console.error(e);});
umgeschrieben.
Habe zwar keine Ahnung von Javascript, aber es funktioniert!
Bitte nochmal gegenchecken, ob das so ok ist.
-
Hallo,
Generell funktioniert der Enigma2-Adapter bei meiner VU+ Solo4k wunderbar.
Ich habe mir lediglich wirkliche "EIN/AUS" und MUTEon/off gebaut, da das blose toggeln ja manchmal nervig sein kann, wenn man es in ganzen szenen hat. (z.b. "… Medien aus" - es schaltet sich alles aus, aber der Sat-Receiver an, weil sie aus war!
)
Aber super! Danke!
Ich habe mir mit den Webif-commandos mit hilfe von "http://192.168.0.10/web/getallservices" für meine häufig benutzen Sende eigene Datenpunkte angelegt die wunderbar funktionieren.
Wie hier aber auch anderswo besprochen, ist Alexa etwas zickig, was die Sendernamen angeht.
Ich wollte hierfür IFTTT ausprobieren, das als Lösung auch in einem anderen Forum angesprochen wurde.
Da auch hier Fragen dazu kam, wollte ich es hier reinbringen, auch wenn IFTTT hier nicht das Thema ist.
Ich glaube IFTTT sollte bei mir nun laufen (d.h. ist mit ioBroker gekoppelt). Ich habe nur keine Ahnung wie ich die Datenpunkte im ioBroker triggern kann mit IFTTT?
Bei URL gebe ich iobroker.net/IFTTT/@meinen-iobroker-key ein.
Aber was soll in die Felder:
-
METHOD?
-
CONTENT TYPE?
-
BODY?
-
-
Hallo,
Generell funktioniert der Enigma2-Adapter bei meiner VU+ Solo4k wunderbar.
Ich habe mir lediglich wirkliche "EIN/AUS" und MUTEon/off gebaut, da das blose toggeln ja manchmal nervig sein kann, wenn man es in ganzen szenen hat. (z.b. "… Medien aus" - es schaltet sich alles aus, aber der Sat-Receiver an, weil sie aus war!
) `
Ich habe die Alexa Funktion vor einiger Zeit hinzugefügt. Damit ist das ein bzw ausschalten und Ton an aus auch möglich.
Gruß
Matten Matten
-
So, gefunden, mit dem Befehl
http://IP-Dreambox/web/remotecontrol?command=207&rcu=advanced
kann ich Pause ausführen und bei erneuter Ausführung weiterführen `
Danke für die Info ändere ich in dem Script ab. Was ist mit dem Stopp Button? Funktioniert der Befehl bei deiner Dreambox?
Gruß
Matten Matten
-
Nein, Stop funktioniert auch nicht, brauche ich aber auch nicht.
Der "Ersatz-Code" würde wahrscheinlich funktionieren
-
Nein, Stop funktioniert auch nicht, brauche ich aber auch nicht.
Der "Ersatz-Code" würde wahrscheinlich funktionieren `
Dann mal bitte mit
> ENIGMA 2 BUTTON SCRIPT V3.3
testenhttps://github.com/Matten-Matten/ioBrok … in/COMMAND
und berichten danke
Gruß
Matten Matten
-
Hallo Matten Matten,
leider ist meine Dream 7020 abgeraucht.
Also eine VU Duo gekauft.
Box läuft mit Open Webinterface ( z.B Fernbedienung ) / Streamen des Videos geht auch im Browser.
Im Adapter geht der Poll alle 5 Sec.
PW hatte ich nicht vergeben per http in der VU.
Also kann Dreambox nicht richtig sein.
Als Standart für eine Dream ja, aber nicht bei der VU.
Button Script ist Ja,
Frage, wie wird der http Befehl gesendet ?
Button klick bei Button Config scheint klar zu sein.
Was wird hier gesendet ?
Kein Button geht , wo ist mein Denkfehler ?
PW Konflickt da du Dreambox setzt ?
Ralla
5230_verbindung_geht.jpg -
das mit dem Passwort ist ein Bug den hab ich auch gleich beseitigt einfach die version erneut von github laden
Gruß
Matten Matten
-
Button Script ist Ja,
Frage, wie wird der http Befehl gesendet ?
Button klick bei Button Config scheint klar zu sein.
Was wird hier gesendet ?
Ralla `
Das Script hast du erstellt?
https://github.com/Matten-Matten/ioBrok … in/COMMAND
Dieses JAVA script muss im SCRIPT ADAPTER (Script Engine) angelegt, konfiguriert gespeichert und gestartet werden.
-
Danke rennt jetzt mit Button.
Alle Button teste ich morgen.
Sehr cool gemacht.
Wünschenswert wäre bei Instanzen / Adapter die Box zu definieren.
7020, VU Duo oder Zero oder so.
Hier wegen den verschiedenen Fernbedienungscodes / PWs.
Die Erstellung des Scriptes sollte auch Automatisch gehen.
Cooles Projekt, gut gemacht, nicht Böse sein, sind nur Vorschläge.
:mrgreen:
Ralla
5230_zeile.jpg -
@ Matten Matten,
die Datei Command liegt bei mir auf der Vu unter usr / lib / enigma2 /pyhthon / keyids.py
Stop wäre danach 128 , 164 Play Pause , 207 Play.
! KEYIDS = {
! "KEY_RESERVED": 0,
! "KEY_ESC": 1,
! "KEY_1": 2,
! "KEY_2": 3,
! "KEY_3": 4,
! "KEY_4": 5,
! "KEY_5": 6,
! "KEY_6": 7,
! "KEY_7": 8,
! "KEY_8": 9,
! "KEY_9": 10,
! "KEY_0": 11,
! "KEY_MINUS": 12,
! "KEY_EQUAL": 13,
! "KEY_BACKSPACE": 14,
! "KEY_TAB": 15,
! "KEY_Q": 16,
! "KEY_W": 17,
! "KEY_E": 18,
! "KEY_R": 19,
! "KEY_T": 20,
! "KEY_Y": 21,
! "KEY_U": 22,
! "KEY_I": 23,
! "KEY_O": 24,
! "KEY_P": 25,
! "KEY_LEFTBRACE": 26,
! "KEY_RIGHTBRACE": 27,
! "KEY_ENTER": 28,
! "KEY_LEFTCTRL": 29,
! "KEY_A": 30,
! "KEY_S": 31,
! "KEY_D": 32,
! "KEY_F": 33,
! "KEY_G": 34,
! "KEY_H": 35,
! "KEY_J": 36,
! "KEY_K": 37,
! "KEY_L": 38,
! "KEY_SEMICOLON": 39,
! "KEY_APOSTROPHE": 40,
! "KEY_GRAVE": 41,
! "KEY_LEFTSHIFT": 42,
! "KEY_BACKSLASH": 43,
! "KEY_Z": 44,
! "KEY_X": 45,
! "KEY_C": 46,
! "KEY_V": 47,
! "KEY_B": 48,
! "KEY_N": 49,
! "KEY_M": 50,
! "KEY_COMMA": 51,
! "KEY_DOT": 52,
! "KEY_SLASH": 53,
! "KEY_RIGHTSHIFT": 54,
! "KEY_KPASTERISK": 55,
! "KEY_LEFTALT": 56,
! "KEY_SPACE": 57,
! "KEY_CAPSLOCK": 58,
! "KEY_F1": 59,
! "KEY_F2": 60,
! "KEY_F3": 61,
! "KEY_F4": 62,
! "KEY_F5": 63,
! "KEY_F6": 64,
! "KEY_F7": 65,
! "KEY_F8": 66,
! "KEY_F9": 67,
! "KEY_F10": 68,
! "KEY_NUMLOCK": 69,
! "KEY_SCROLLLOCK": 70,
! "KEY_KP7": 71,
! "KEY_KP8": 72,
! "KEY_KP9": 73,
! "KEY_KPMINUS": 74,
! "KEY_KP4": 75,
! "KEY_KP5": 76,
! "KEY_KP6": 77,
! "KEY_KPPLUS": 78,
! "KEY_KP1": 79,
! "KEY_KP2": 80,
! "KEY_KP3": 81,
! "KEY_KP0": 82,
! "KEY_KPDOT": 83,
! "KEY_103RD": 84,
! "KEY_F13": 85,
! "KEY_102ND": 86,
! "KEY_F11": 87,
! "KEY_F12": 88,
! "KEY_F14": 89,
! "KEY_F15": 90,
! "KEY_F16": 91,
! "KEY_F17": 92,
! "KEY_F18": 93,
! "KEY_F19": 94,
! "KEY_F20": 95,
! "KEY_KPENTER": 96,
! "KEY_RIGHTCTRL": 97,
! "KEY_KPSLASH": 98,
! "KEY_SYSRQ": 99,
! "KEY_RIGHTALT": 100,
! "KEY_LINEFEED": 101,
! "KEY_HOME": 102,
! "KEY_UP": 103,
! "KEY_PAGEUP": 104,
! "KEY_LEFT": 105,
! "KEY_RIGHT": 106,
! "KEY_END": 107,
! "KEY_DOWN": 108,
! "KEY_PAGEDOWN": 109,
! "KEY_INSERT": 110,
! "KEY_DELETE": 111,
! "KEY_MACRO": 112,
! "KEY_MUTE": 113,
! "KEY_VOLUMEDOWN": 114,
! "KEY_VOLUMEUP": 115,
! "KEY_POWER": 116,
! "KEY_KPEQUAL": 117,
! "KEY_KPPLUSMINUS": 118,
! "KEY_PAUSE": 119,
! "KEY_F21": 120,
! "KEY_F22": 121,
! "KEY_F23": 122,
! "KEY_F24": 123,
! "KEY_KPCOMMA": 124,
! "KEY_LEFTMETA": 125,
! "KEY_RIGHTMETA": 126,
! "KEY_COMPOSE": 127,
! "KEY_STOP": 128,
! "KEY_AGAIN": 129,
! "KEY_PROPS": 130,
! "KEY_UNDO": 131,
! "KEY_FRONT": 132,
! "KEY_COPY": 133,
! "KEY_OPEN": 134,
! "KEY_PASTE": 135,
! "KEY_FIND": 136,
! "KEY_CUT": 137,
! "KEY_HELP": 138,
! "KEY_MENU": 139,
! "KEY_CALC": 140,
! "KEY_SETUP": 141,
! "KEY_SLEEP": 142,
! "KEY_WAKEUP": 143,
! "KEY_FILE": 144,
! "KEY_SENDFILE": 145,
! "KEY_DELETEFILE": 146,
! "KEY_XFER": 147,
! "KEY_PROG1": 148,
! "KEY_PROG2": 149,
! "KEY_WWW": 150,
! "KEY_MSDOS": 151,
! "KEY_COFFEE": 152,
! "KEY_DIRECTION": 153,
! "KEY_CYCLEWINDOWS": 154,
! "KEY_MAIL": 155,
! "KEY_BOOKMARKS": 156,
! "KEY_COMPUTER": 157,
! "KEY_BACK": 158,
! "KEY_FORWARD": 159,
! "KEY_CLOSECD": 160,
! "KEY_EJECTCD": 161,
! "KEY_EJECTCLOSECD": 162,
! "KEY_NEXTSONG": 163,
! "KEY_PLAYPAUSE": 164,
! "KEY_PREVIOUSSONG": 165,
! "KEY_STOPCD": 166,
! "KEY_RECORD": 167,
! "KEY_REWIND": 168,
! "KEY_PHONE": 169,
! "KEY_ISO": 170,
! "KEY_CONFIG": 171,
! "KEY_HOMEPAGE": 172,
! "KEY_REFRESH": 173,
! "KEY_EXIT": 174,
! "KEY_MOVE": 175,
! "KEY_EDIT": 176,
! "KEY_SCROLLUP": 177,
! "KEY_SCROLLDOWN": 178,
! "KEY_KPLEFTPAREN": 179,
! "KEY_KPRIGHTPAREN": 180,
! "KEY_INTL1": 181,
! "KEY_INTL2": 182,
! "KEY_INTL3": 183,
! "KEY_INTL4": 184,
! "KEY_INTL5": 185,
! "KEY_INTL6": 186,
! "KEY_INTL7": 187,
! "KEY_INTL8": 188,
! "KEY_INTL9": 189,
! "KEY_LANG1": 190,
! "KEY_LANG2": 191,
! "KEY_LANG3": 192,
! "KEY_LANG4": 193,
! "KEY_LANG5": 194,
! "KEY_LANG6": 195,
! "KEY_LANG7": 196,
! "KEY_LANG8": 197,
! "KEY_LANG9": 198,
! "KEY_PLAYCD": 200,
! "KEY_PAUSECD": 201,
! "KEY_PROG3": 202,
! "KEY_PROG4": 203,
! "KEY_SUSPEND": 205,
! "KEY_CLOSE": 206,
! "KEY_PLAY": 207,
! "KEY_FASTFORWARD": 208,
! "KEY_BASSBOOST": 209,
! "KEY_PRINT": 210,
! "KEY_HP": 211,
! "KEY_CAMERA": 212,
! "KEY_SOUND": 213,
! "KEY_QUESTION": 214,
! "KEY_EMAIL": 215,
! "KEY_CHAT": 216,
! "KEY_SEARCH": 217,
! "KEY_CONNECT": 218,
! "KEY_FINANCE": 219,
! "KEY_SPORT": 220,
! "KEY_SHOP": 221,
! "KEY_ALTERASE": 222,
! "KEY_CANCEL": 223,
! "KEY_BRIGHTNESSDOWN": 224,
! "KEY_BRIGHTNESSUP": 225,
! "KEY_MEDIA": 226,
! "KEY_UNKNOWN": 240,
! "KEY_OK": 352,
! "KEY_SELECT": 353,
! "KEY_GOTO": 354,
! "KEY_CLEAR": 355,
! "KEY_POWER2": 356,
! "KEY_OPTION": 357,
! "KEY_INFO": 358,
! "KEY_TIME": 359,
! "KEY_VENDOR": 360,
! "KEY_ARCHIVE": 361,
! "KEY_PROGRAM": 362,
! "KEY_CHANNEL": 363,
! "KEY_FAVORITES": 364,
! "KEY_EPG": 365,
! "KEY_PVR": 366,
! "KEY_MHP": 367,
! "KEY_LANGUAGE": 368,
! "KEY_TITLE": 369,
! "KEY_SUBTITLE": 370,
! "KEY_ANGLE": 371,
! "KEY_ZOOM": 372,
! "KEY_MODE": 373,
! "KEY_KEYBOARD": 374,
! "KEY_SCREEN": 375,
! "KEY_PC": 376,
! "KEY_TV": 377,
! "KEY_TV2": 378,
! "KEY_VCR": 379,
! "KEY_VCR2": 380,
! "KEY_SAT": 381,
! "KEY_SAT2": 382,
! "KEY_CD": 383,
! "KEY_TAPE": 384,
! "KEY_RADIO": 385,
! "KEY_TUNER": 386,
! "KEY_PLAYER": 387,
! "KEY_TEXT": 388,
! "KEY_DVD": 389,
! "KEY_AUX": 390,
! "KEY_MP3": 391,
! "KEY_AUDIO": 392,
! "KEY_VIDEO": 393,
! "KEY_DIRECTORY": 394,
! "KEY_LIST": 395,
! "KEY_MEMO": 396,
! "KEY_CALENDAR": 397,
! "KEY_RED": 398,
! "KEY_GREEN": 399,
! "KEY_YELLOW": 400,
! "KEY_BLUE": 401,
! "KEY_CHANNELUP": 402,
! "KEY_CHANNELDOWN": 403,
! "KEY_FIRST": 404,
! "KEY_LAST": 405,
! "KEY_AB": 406,
! "KEY_NEXT": 407,
! "KEY_RESTART": 408,
! "KEY_SLOW": 409,
! "KEY_SHUFFLE": 410,
! "KEY_BREAK": 411,
! "KEY_PREVIOUS": 412,
! "KEY_DIGITS": 413,
! "KEY_TEEN": 414,
! "KEY_TWEN": 415,
! "KEY_DEL_EOL": 448,
! "KEY_DEL_EOS": 449,
! "KEY_INS_LINE": 450,
! "KEY_DEL_LINE": 451,
! "KEY_ASCII": 510,
! "KEY_MAX": 511,
! "BTN_0": 256,
! "BTN_1": 257,
! }Auf der Dream 7020 ist die .py zumindest bei den 3 Commands gleich.
Mal eine Anfängerfrage. Warum unterscheidest du die Webif Versionen ab Zeile 46 ?
Wird das Command nicht in der Box festgelegt ? ( keyids.py )
Also eher Enigma2 Box und Image abhängig.
So noch mal nach geschaut, VU ist VTI Image , Dream Newnigma.
Beide keyids.py sind vom 17.06.15.
Exit, Menü, RA und TV sind gleich also 174,139,385 und 377.
Wäre mal Interessant zu wissen was in hg6806 und deiner .py steht.
Denke bei hg6806 geht das wenn er umstellt bei Instanzen / Webinterface auf Open Webinterface.
Nachtrag, gerade getestet,
Stop Button geht auf der VU.
Hilft ja nur die .py zu vergleichen.
Wäre dann überlegenswert Instanzen / Webinterface ändern in Image vor 17.06.15 oder so.
Leider sind die Unterschiede der .py nicht bekannt.
Ralla
-
bisher gab es nur probleme mit den commands bei dreambox receivern mit deren webif. deshalb unterscheide ich zwischen dem dreamwebif und open webif.
-
enigma2 Adapter ist raus.
Version 0.4.3 (2018-10-21)
(Matten-Matten) Nicht bestätigte Werte und zustände (rot angezeigt) angepasst
(Matten-Matten) Message um ein Objekt erweitert "ANSWER_IS"
(Matten-Matten) Button BUTTON SCRIPT auf V3.4 angepasst (https://github.com/Matten-Matten/ioBrok … in/COMMAND)
Viel Spaß beim testen, schönen Sonntag
Gruß
Matten Matten
-
Moin, ich war mal wieder fleißig
enigma2 Adapter ist raus, es wird kein extra Script für die Button mehr benötigt.
https://github.com/Matten-Matten/ioBroker.enigma2.git
Gruß
Matten Matten
-
Top Arbeit, Danke!
Hab Dir noch ne verbesserung
Mit dem SystemInfo Adapter die Programme einlesen und für jedes Bouquet die Sender einlesen. So habe ich es bereits. Eventuell kannst Du das integrieren (z.B. einmal am Tag auch die Senderliste aktualisieren oder in den Einstellungen vom Adapter die Zei einstellen lassen)
Dann kann man auch umschalten
Denke Du weisst was damit anzufangen…....
Hier ein Screenshot
Hier der Code für Regex und Dreambox
Bouquets: http://192.168.77.62/web/getservices
DreamBox.MyBouquetsChannelSky: http://192.168.77.62/web/getservices?sR … SKY%20(TV)
DreamBox.MyBouquetsChannelUM: http://192.168.77.62/web/getservices?sR ... ia__tv_.tv"
Regex wäre jedesmal
(<\w+[^<]*?)\s+([\w-]+)="([^"]+)">
-
Top Arbeit, Danke!
Hab Dir noch ne verbesserung
Mit dem SystemInfo Adapter die Programme einlesen und für jedes Bouquet die Sender einlesen. So habe ich es bereits. Eventuell kannst Du das integrieren (z.B. einmal am Tag auch die Senderliste aktualisieren oder in den Einstellungen vom Adapter die Zei einstellen lassen)
Dann kann man auch umschalten
`
Ich bin froh das der Adapter jetzt ohne extra script läuft :roll: …
Ich muss schauen ob ich dafür zeit finde.
Denke Du weisst was damit anzufangen….... `
nicht viel sry :oops: .
:!: :?: Ich muss ert einmal schauen ob ich jemanden finde, der den Adapter auf NPM portiert….
Gruß
Matten Matten
-
Im Grunde per Request die Programme der konfigurierten Box auslesen und als Button ablegen um umzuschalten….
-
Leider habe ich gerade das Problem, dass oft Button-Drücke 2-fach angesehen werden. D.h. Prg Umschaltung springt mal 2 Programme statt 1 noch vorne/hinten, Bos schaltet bei Standby aus und gleich wieder an.
Welche Widget habt ihr genommen und wie sind die Einstellungen?
Ich habe das hqwidget, Taster angeklickt, Wert Min 0, max 1
-
Hi zusammen,
Code für das Bouquet/Sender-Auslesen und wechseln hatte ich mal weiter oben gepostet. Hoffe, dass man das halbwegs einfach in den Adapter einbauen könnte.
Viele Grüße
Stefan
Hallo zusammen,
habe mal eine Funktion zur Anzeige aller Bouquets und Kanäle und zum Umschalten implementiert:
! var parseString = require('xml2js').parseString;
! var request = require('request');
! var urlVUplus = 'http://192.168.1.101:82';
! var instanz = 'javascript.0'; instanz = instanz + '.';
! var pfad = 'XMLParsing'; pfad = pfad + '.'; // Pfad innerhalb der Instanz
! var debug = true;
! // VU+ Power-Status
! createState(pfad + 'VUplus.BouquetNames', 'init', {type: "string", name: "Names of Enigma bouquets", write:true, read:true});
! createState(pfad + 'VUplus.BouquetNumbers', 'init', {type: "string", name: "References of Enigma bouquets", write:true, read:true});
! createState(pfad + 'VUplus.NumberOfBouquets', 0, {type: "number", name: "How many bouquets are defined in Enigma", write:false, read:true});
! createState(pfad + 'VUplus.BouquetNumberCurrent', 0, {type: "number", name: "Number of selected Enigma bouquet", write:true, read:true});
! createState(pfad + 'VUplus.BouquetCurrentlySelected.BouquetName', 'init',{type: "string", name: "Name of currently selected Enigma bouquet", write:true, read:true});
! createState(pfad + 'VUplus.BouquetCurrentlySelected.BouquetReference', 'init',{type: "string", name: "Reference of currently selected Enigma bouquet", write:true, read:true});
! createState(pfad + 'VUplus.BouquetCurrentlySelected.ChannelNames', 'init',{type: "string", name: "Channel names of currently selected Enigma bouquet", write:true, read:true});
! createState(pfad + 'VUplus.BouquetCurrentlySelected.ChannelReferences', 'init',{type: "string", name: "Channel references of currently selected Enigma bouquet", write:true, read:true});
! createState(pfad + 'VUplus.ChannelReferenceCurrent', 'init', {type: "string", name: "Reference of selected channel", write:true, read:true});
! //example HHTP requests to obtain bouquet and channel list:
! //http://192.168.1.101:82/web/getservices
! //Favourites (TV):
! //http://192.168.1.101:82/web/getservices … %20bouquet
! //German Free SD
! //http://192.168.1.101:82/web/getservices ... %20bouquet
! //German Free HD
! //http://192.168.1.101:82/web/getservices ... %20bouquet
! //German HD+
! //http://192.168.1.101:82/web/getservices ... %20bouquet
! //------------------------------------------------------------------------------
! // This function collects all channel names (TV stations) and the respective
! // channel references and writes them into the respective states created before
! // (in calling function GetVUplusChannels()
! //------------------------------------------------------------------------------
! function GetVUplusBouquetChannels(strBouquetReference, iBouquetNumber) {
! var strAllChannelNames = '';
! var strAllChannelReferences = '';
! request(urlVUplus + '/web/getservices?sRef=' + strBouquetReference, function (error, response, body) {
! if (!error && response.statusCode == 200) {
! //if(debug){log("Body: " + body);}
! parseString(body, {
! explicitArray: false,
! mergeAttrs: true
! },
! function (err, result) {
! if (err) {
! log("Fehler: " + err);
! } else {
! for (var j = 0; j < result.e2servicelist.e2service.length; j++) {
! var strSender = result.e2servicelist.e2service[j].e2servicename;
! var strService = result.e2servicelist.e2service[j].e2servicereference;
! if(debug){ log("Sender Nr. " + j + ": " + strSender + ", Service: " + strService);}
! strAllChannelNames = strAllChannelNames + strSender + ';';
! strAllChannelReferences = strAllChannelReferences + strService + ';';
! }
! strAllChannelNames = strAllChannelNames.slice(0,strAllChannelNames.length-1); // cut away last ";"
! strAllChannelReferences = strAllChannelReferences.slice(0,strAllChannelReferences.length-1); // cut away last ";"
! if(debug){ log('All channels for Bouquet ' + iBouquetNumber +': ' + strAllChannelNames);}
! if(debug){ log('All channel references for Bouquet ' + iBouquetNumber + ': ' + strAllChannelReferences);}
! setState(instanz + pfad + 'VUplus.Bouquet' + iBouquetNumber + '.ChannelNames', strAllChannelNames);
! setState(instanz + pfad + 'VUplus.Bouquet' + iBouquetNumber + '.ChannelReferences', strAllChannelReferences);
! }
! });
! } else {
! if(debug){log(error);}
! }
! });
! }
! //–----------------------------------------------------------------------------
! // This function creates states for all bouquets with all info about the bouquet
! // e.g. channels (TV station) names and respective service references
! //------------------------------------------------------------------------------
! function CreateBouquetStates(NrOfBouquets) {
! for (var i = 0; i < NrOfBouquets; i++) {
! createState(pfad + 'VUplus.Bouquet' + i + '.BouquetName', 'init',{type: "string", name: "Name of Enigma bouquets number "+ i, write:true, read:true});
! createState(pfad + 'VUplus.Bouquet' + i + '.BouquetReference', 'init',{type: "string", name: "Reference of Enigma bouquets number "+ i, write:true, read:true});
! createState(pfad + 'VUplus.Bouquet' + i + '.ChannelNames', 'init',{type: "string", name: "Channel names of Enigma bouquets number "+ i, write:true, read:true});
! createState(pfad + 'VUplus.Bouquet' + i + '.ChannelReferences', 'init',{type: "string", name: "Channel references of Enigma bouquets number "+ i, write:true, read:true});
! }
! // TODO: here code could be added which deletes states if more bouquet states have already been created befor than bouquets exit presently, e.g. this can happen if an bouquet has been deleted on the ENIGMA system
! }
! //------------------------------------------------------------------------------
! // This function all available bouquets (TV station lists) for an ENIGMA system
! // and creates states for all bouquets filled with channel (TV station) and
! // respective service references for bouquets and channels
! //------------------------------------------------------------------------------
! function GetVUplusChannels() {
! request(urlVUplus + '/web/getservices', function (error, response, body) {
! if (!error && response.statusCode == 200) {
! //if(debug){log("Body: " + body);}
! parseString(body, {
! explicitArray: false,
! mergeAttrs: true
! },
! function (err, result) {
! if (err) {
! log("Fehler: " + err);
! } else {
! if(debug){ log("Anzahl Bouquets: " + result.e2servicelist.e2service.length);}
! var strBouquetName = '';
! var strBouquetReference = '';
! var strAllBouquetNames = '';
! var strAllBouquetNumbers = '';
! // create as many states as bouquets exist
! setState(instanz + pfad + 'VUplus.NumberOfBouquets', result.e2servicelist.e2service.length);
! CreateBouquetStates(result.e2servicelist.e2service.length);
! for (i = 0; i < result.e2servicelist.e2service.length; i++) {
! strBouquetName = result.e2servicelist.e2service__.e2servicename;
! strBouquetReference = result.e2servicelist.e2service__.e2servicereference.replace(/ /g, "%20").replace(/"/g, "%22");
! strAllBouquetNames = strAllBouquetNames + strBouquetName + ';';
! strAllBouquetNumbers = strAllBouquetNumbers + i + ';';
! if(debug){ log("Bouquet Nr. " + i + ": " + strBouquetName + ", Bouquet References: " + strBouquetReference);}
! setState(instanz + pfad + 'VUplus.Bouquet' + i + '.BouquetName', strBouquetName);
! setState(instanz + pfad + 'VUplus.Bouquet' + i + '.BouquetReference', strBouquetReference);
! GetVUplusBouquetChannels(strBouquetReference, i);
! }
! strAllBouquetNames = strAllBouquetNames.slice(0,strAllBouquetNames.length-1); // cut away last ";"
! strAllBouquetNumbers = strAllBouquetNumbers.slice(0,strAllBouquetNumbers.length-1); // cut away last ";"
! if(debug){ log("All Bouquets: " + strAllBouquetNames);}
! if(debug){ log("All Bouquet numbers: " + strAllBouquetNumbers);}
! setState(instanz + pfad + 'VUplus.BouquetNames', strAllBouquetNames);
! setState(instanz + pfad + 'VUplus.BouquetNumbers', strAllBouquetNumbers);
! }
! });
! } else {
! if(debug){log(error);}
! }
! });
! }
! on(instanz + pfad + 'VUplus.BouquetNumberCurrent', function(obj) {
! var ChannelNamesOfNewCurrentBouquet = getState(instanz + pfad + 'VUplus.Bouquet' + obj.newState.val + '.ChannelNames').val;
! var ChannelReferencesOfNewCurrentBouquet = getState(instanz + pfad + 'VUplus.Bouquet' + obj.newState.val + '.ChannelReferences').val;
! var FirstChannelReferenceOFNewBouquet = ChannelReferencesOfNewCurrentBouquet.slice(0, ChannelReferencesOfNewCurrentBouquet.indexOf(';'));
! if(debug){ log('Current bouquet number changed to: ' + obj.newState.val );}
! if(debug){ log('First channel in urrent bouquet: ' + ChannelNamesOfNewCurrentBouquet.slice(0, ChannelNamesOfNewCurrentBouquet.indexOf(';')) );}
! if(debug){ log('First channel reference in urrent bouquet: ' + FirstChannelReferenceOFNewBouquet);}
! // serch if the currently selected TC channel exists in the new selected bouquet
! if(ChannelReferencesOfNewCurrentBouquet.indexOf(getState(instanz + pfad + 'VUplus.ChannelReferenceCurrent').val) == -1) {
! if(debug){ log('Currently selected TC channel not found in previous bouquet, switching channel.');}
! setState(instanz + pfad + 'VUplus.ChannelReferenceCurrent', FirstChannelReferenceOFNewBouquet);
! }
! // set new values for selected bouquet
! setState(instanz + pfad + 'VUplus.BouquetCurrentlySelected.BouquetName', getState(instanz + pfad + 'VUplus.Bouquet' + obj.newState.val + '.BouquetName').val);
! setState(instanz + pfad + 'VUplus.BouquetCurrentlySelected.BouquetReference', getState(instanz + pfad + 'VUplus.Bouquet' + obj.newState.val + '.BouquetReference').val);
! setState(instanz + pfad + 'VUplus.BouquetCurrentlySelected.ChannelNames', ChannelNamesOfNewCurrentBouquet);
! setState(instanz + pfad + 'VUplus.BouquetCurrentlySelected.ChannelReferences', ChannelReferencesOfNewCurrentBouquet);
! });
! on(instanz + pfad + 'VUplus.ChannelReferenceCurrent', function(obj) {
! if(debug){ log('Chosen current channel reference: ' + obj.newState.val );}
! request(urlVUplus + '/api/zap?sRef=' + obj.newState.val, function (error, response, body) {
! if (!error && response.statusCode == 200) {
! //log("Body: " + body);
! parseString(body, {
! explicitArray: false,
! mergeAttrs: true
! },
! function (err, result) {
! if (err) {
! log("Fehler: " + err);
! } else {
! if(debug){ log(result);}
! }
! });
! } else {
! log(error);
! }
! });
! });
! // create and fill all states for bouquets and station names
! GetVUplusChannels();____ ____Code mag natürlich noch optimierbar sein. Ich fände es cool, wenn es diese Funktion gleich im Adapter gäbe, oder gibt es einen Grund, das dort nicht zu implementieren? Kann dann so aussehen (roter Kasten):VUplus.jpg
Die Widgets dafür sind dann wie folgt:__
! [{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.XMLParsing.VUplus.BouquetNumberCurrent","values":"{javascript.0.XMLParsing.VUplus.BouquetNumbers}","texts":"{javascript.0.XMLParsing.VUplus.BouquetNames}","height":"170","open":false,"gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"g_visibility":false,"g_fixed":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"370px","top":"213px","width":"214px","height":"29px"},"widgetSet":"jqui"},{"tpl":"tplValueString","data":{"oid":"","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_prepend":"Bouquet:","html_append":"","test_html":"","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"376px","top":"184px","color":"#ffffff","width":"186px","height":"20px","text-shadow":"rgba(0, 0, 0, 0.9) 3px 3px 4px","font-family":"Tahoma, Geneva, sans-serif"},"widgetSet":"basic"},{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.XMLParsing.VUplus.ChannelReferenceCurrent","values":"{javascript.0.XMLParsing.VUplus.BouquetCurrentlySelected.ChannelReferences}","texts":"{javascript.0.XMLParsing.VUplus.BouquetCurrentlySelected.ChannelNames}","height":"170","open":false,"gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"g_visibility":false,"g_fixed":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"605px","top":"212px","width":"217px","height":"29px"},"widgetSet":"jqui"},{"tpl":"tplValueString","data":{"oid":"","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_prepend":"Sender:","html_append":"","test_html":"","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","values":"{javascript.0.XMLParsing.VUplus.Bouquet3.ChannelReferences}","texts":"{javascript.0.XMLParsing.VUplus.Bouquet3.ChannelNames}"},"style":{"left":"607px","top":"181px","color":"#ffffff","width":"186px","height":"20px","text-shadow":"rgba(0, 0, 0, 0.9) 3px 3px 4px","font-family":"Tahoma, Geneva, sans-serif"},"widgetSet":"basic"}] __Vielleicht mag das ja jemand einbauen (meine Git-/Adapter- Kenntnisse sind leider nicht gut genug).
Ne Timer-Liste wäre auch cool. Vielleicht schafft das ja auch jemand schneller als ich… ;)____ `