YIO Remote Two auf Kickstarter

Ist der „glückliche“ Fonzo denn mittlerweile noch glücklicher geworden? @Fonzo hast du denn noch Tipps, wie du die Probleme überwunden hast?
Ich habe derzeit die Befehle der originalen FB eingelesen, danach noch die Befehle aus der Harmony ergänzt und auch Hex Codes aus dem Internet heruntergeladen. Alle Geräte haben Sichtkontakt.

Ich muss die Tage noch einmal weiter testen. In den Einstellungen gibt es auch noch den Punkt „IR-Blaster“ den man aktivieren kann.

Nein, ich kämpfe selber noch. Ich hoffe das ich aus der wenigen Dokumentation etwas schlauer werde.

Ein Ansteuern mit dem zu erstellenden PHP aus Symcon heraus geht schon mal. Das Problem ist zur Zeit der umgekehrte Weg, die Remote 3 findet Symcon bzw. das PHP Modul über mDNS dann ist aber auch schon Schluss und die Remote 3 schickt auf ein Socket Upgrade nur noch Murks. Ich habe zur Zeit keine Ahnung wo genau weiter debuggen. Der Hersteller reagiert zur Zeit auch nicht auf anfragen. Wenn ich weiter gekommen sein sollte, melde ich mich, bzw. wenn das PHP Modul so weit fertig ist, dass man das guten Gewissens zum ersten testen freigeben kann.

Das Problem sind wohl die Repetitions, ich kann anhand ein und dem selben Pronto Code nachvollziehen das der Pronto Code selber korrekt ist nur mit anderen IR Gateways lässt sich der Prontocode versenden mit dem Dock 3 zur Zeit nicht. Der Hersteller Support hat sich dazu noch nicht geäußert. Mit den IR Sequenzen prüfe ich noch, das war ein Tipp von HarmonyFan, ob das irgendeine Besserung bringt bei den angelernten IR Codes.

Ist nur sehr dürftig bisher für IR Anlernfunktion des Dock 3. Da funktioniert der deutlich günstigere SwitchBot Hub Mini beim anlernen von IR Codes deutlich besser bzw. zuverlässiger im direkten Vergleich.

Das sehe ich auch so. Zumal das Kerngeschäft einer Fernbedienung das Senden von IR Befehlen sein sollte. Ich habe auch eine Supportanfrage geschickt, um die Dringlichkeit zu erhöhen. Solange die IR Befehle nicht funktionieren macht es für mich auch keinen Sinn Aktivitäten oder Tastenbelegungen etc. anzulegen, sonst habe ich nachher noch doppelte Arbeit. Ich hoffe nur , dass sich das Problem schnell lösen lässt, da ich die Remote gerne nutzen möchte :face_with_diagonal_mouth:

Hi,
ich kann beim lernen von IR nicht klagen benutze es aber selten. Selbst meinen 10 Jahre alten Samsung-TV kann ich jetzt per IP bedienen wenn ich denn wollte. Bei IR senden muss man unterscheiden:

  1. R2 Fernbedienung bescheiden, Dock etwas besser
  2. R3 soll besser sein kann ich aber leider noch nicht beurteilen

Die WS-API, die Fonzo benutzen muss, habe ich noch nicht versucht. REST-API finde ich nicht schlecht hat aber eingeschränkte Funktionen.

Vielleicht finden wir ein gemeinsames Gerät das per IR gesteuert werden kann damit wir die selben Voraussetzungen haben. Ich könnte anbieten:
Philips OLED 806, VU-Satreceiver, Dune-HD Homatic, Samsung TV, Onkyo 1509/Denon 4400, Teufel AKTIV 25, Octagon SF8008, Denon RCD Microanlage,.

Bis auf den Samsung TV habe ich für meine IR-Geräte alles von der Originalfernbedienung angelernt alelrdings vor ungefähr einem Jahr als es noch nicht viele Integrationen gab.

Mit Fonzo habe ich bei Denon eine Ähnlichkeit und vielleicht Teufel Sub und Teufel aktiv.

Mit IR Kommando soll man einen Befehl wiederholt schicken mit der IR Sequenz mehrere auch verschiedene Kommandos mit einer Pause dazwischen. Keine Ahnung ob die Pause bei Sequenz einen Unterschied macht. Ich schätze die Pause bräuchte man meistens beim Power-Befehl von Projektoren die oft doppelte Befehle benötigen damit sie nicht ausversehen ausgeschaltet werden.

Ralf

Hallo Ralf,
gute Idee. Aber ich glaube wir haben nicht viele Parallelen. Denon 2700h, Apple TV, Samsung TV, Epson 11000W, TechnoTrend S835.

Ich kann zeitbedingt leider immer nur zwischendurch ein wenig testen, aber ich bin ein Stück weitergekommen. Den Unterschied hat der „Blaster“ gemacht. Bei geöffneter Tür kamen die Befehle nicht immer an. Das größte Sorgenkind ist der alte Satreceiver TechnoTrend. Nachdem der Blaster im Schrank war und die Tür geschlossen werden konnte, reagierte er. Nicht jedesmal, aber da werde ich an der Position des Blasters noch arbeiten müssen.

Der AppleTV wurde nur erfolgreich eingebunden, wenn man auf die statische IP verzichtet. Hat mich auch einige Nerven gekostet, bis ich das rausgefunden hatte. Dafür bin ich jetzt Weltmeister im Werksreset :wink:

Der Blaster (das größere Gerät) sollte nach Anleitung auf dem TV-Board stehen. Bei mir muss er im TV Board untergebracht werden. Finde ich merkwürdig. Was ich mit dem Externder anstelle, ist mir noch nicht ganz bewusst. Der hängt jetzt aber auch erstmal mit im TV-Board.

Was ich an der Remote ein wenig vermisse ist eine „Zurücktaste“ für die Menüsteuerung (beispw. bei der Navigation beim Apple TV) . Diese ist zwar auch auf der Remote, aber wird eigentlich dazu verwendet, um den Touchbildschirm zu steuern und dort zu navigieren. Darauf wird auch hingewiesen, wenn man die Belegung der Taste ändern möchte.

Moin Marvus,
Denon, Apple und Samsung (wenn nicht zu alt < 2015) können per IP mit einer Integration gesteuert werden. Meinen Epson kann ich auch per IP steuern weil er pjLink unterstützt. pjLink ist eine Art Telnet-Schnittstelle wie sie auch Denon benutzt und die kann man vielleicht mit der Requests-Integration benutzen. Nur beim Technotrend habe ich keine Ahnung ob er irgendwie übers Netz gesteuert werden kann.

Was die Zurücktaste angeht benutze ich die sehr wohl in Aktionen denn Aktivitäten und Seiten wähle ich lieber per Touch aus. Auf kurz Zurück habe ich zurück und auf lang Rot was bei Magenta-TV bedeutet den letzten Sender zu schauen.

Ralf

Die Idee mit pjLink ist super, kannte ich noch nicht. Leider habe ich derzeit noch keine Möglichkeit ein Lan-Kabel zum Projektor zu legen. Aber in Zukunft sicherlich eine Idee. Der Samsung sowie der Technotrend sind leider zu alt und haben keinen pjLink.

Ich habe die Remote aber mittlerweile funktional eingerichtet. Die IR Signale kommen jetzt auch an, da der Blaster mit im Schrank ist. Ausschlaggebend war zudem, dass ich in den Sequenzen zwischen jedem Befehl ein Delay von 200ms eingefügt habe.

Da ich bei der Harmony die Funktion „Devices“ sehr gut fand, habe ich mir dies in der Remote nachgebaut und eine Seite mit den einzelnen Geräten angelegt. Bei den einzelnen Geräten habe ich alle Befehle als Text-Button hinzugefügt. War zwar einiges an Arbeit, da der Text auch nie automatisch übernommen wurde und händisch ergänzt werden musste, aber das richtet man nur einmal ein. Was mir hier fehlt, dass die Interaktoren, die nicht über IR gesteuert werden, wie das Apple TV, keine einzelnen Befehle auflisten, die ich unter meinen „Devices“ auflisten kann.

Die Zurücktaste habe ich nun auch so wie du belegt und es ist deutlich entspannter.

Ich überlege auch eine VU+ Uno 4K SE 1x DVB-S2 anzuschaffen und den Technotrend zu ersetzen. Andereseits scheue ich mich noch ein wenig davor, da der Technotrend derzeit die Signale empfängt und man im Internet liest, dass die Einrichtung viel Einlesezeit in Anspruch nehmen soll. Kannst du hier von deinen Erfahrungen berichten?

Viele Grüße
marvus

Moin,
Samsung und Technotrend haben garatiert kein pjLink weil es hauptsächlich für Projektoren gedacht war. Wie alt ist der Samsung denn? Theoretisch könnten mit der Samsung Integration auch noch Geräte von 2012/13 gehen. Bei mir is es Serie 6 von 2015.

Delays habe ich auch großzügig verteilt :grin:
„Devices“ habe ich bei mir auch ziemlich schnell nachgebildet. Bei mir eine Grupe mit Geräten und darin Gruppen für jedes Zimmer und darin dann die Geräte Entitäten des Raumes. Habe ich bisher aber sehr selten gebraucht. Nutzen ist auch eingeschränkt weil man nur bei IR Geräten die GUI selbst verändern kann (oder konnte?) und ich habe nur noch 2 IR Geräte.

Ich benutze seit > 20 Jahren Enigma-/VU-Receiver für mich ist es leicht :rofl: Wenn Du Sat mit Receiver oft schaust und viel aufnimmst würde ich dir einen VU mit FBC-Tuner nehmen was der VU+ Uno 4K SE wohl hat. FBC bedeutet Full Band Control, d.h. er holt sich eine komplette Ebene vom LNB und er hat 8 Demodulatoren, d.h. er kann mit einem Kabel Aufnahmen von bis zu 8 Transponder machen. Meist ist auch FCC möglich, d.h. Fast Channel Change mit Umschaltzeiten beim Zappen <0.1 Sekunde.

Enigma2 ist ein OpenSource Projekt und es gibt mehrere Images und nicht nur das vom Hersteller. In Deutschland ist OpenATV sehr beliebt. Schau dich da mal im Forum um. VTI mag ich nicht so sehr weil die sich zumindestens einen Dreck um die OpenSource Lizenz geschert haben. Ich bin durch Harmony-Betatest zum VU-Betatest zu OpenVix gekommen.

Um es vorweg zu nehmen Enigma2 ist eine Welt für sich. Konfigurierbar und Erweiterbar bis zum umfallen aber auch einfach zu benutzen wenn es eingerichtet ist.

Ralf

Ich habe heute mal meine 4x2 HDMI Matrix als IR angelernt und da hat mich interessiert wie ich an die Befehle komme. Ist bei IR/BlueTooth/External nicht ganz so einfach.

Einmal benötigt man

curl_setopt($ch, CURLOPT_URL, ‚http://‘.$IP2.‚/api/remotes?kind=‘ . $Kind . ‚&page=‘.$Page.‚&limit=100‘)

um an generelle Informationen wie UID und Name zu kommen.

Für jede UID muss man noch

curl_setopt($gfi, CURLOPT_URL, ‚http://‘.$IP.‚/api/remotes/‘ . $UID);

abfragen um an [„options“][„simple_commands“] zu kommen. Hier noch mein Script das Remotes anlegt und darin dann wieder Verzeichnisse für BlueTooth, IR und External mit vielen Informationen.

<?php
// cURL-Session initialisieren
$Key1 = GetValue(22717);
$IP1 = '192.168.178.227';
$Key2 = GetValue(17539);
$IP2 = '192.168.178.228';

if (!GetValue(43134)) return;
//if (!GetValue(44614)) return;

$Kinds =array("1"  => "BT", "2" => "IR", "3" => "EXTERNAL");

// Kategorie Remotes erzeugen
$RootID = @IPS_GetObjectIDByName("Remotes", IPS_GetParent($_IPS['SELF']));
if ($RootID == false){
    $RootID = IPS_CreateCategory();                                 // Kategorie anlegen
    IPS_SetName($RootID, "Remotes");                                // Kategorie benennen
    IPS_SetParent($RootID, IPS_GetParent($_IPS['SELF']));           // Kategorie einsortieren unter dem Objekt
}

// cURL-Session initialisieren
foreach ($Kinds as $Kind){
    $Page = 1;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . $Key2,
        'accept: application/json'
    ]);
// Kategorie Remotes erzeugen
    $ParentID = @IPS_GetObjectIDByName("Remotes " . $Kind, $RootID);
    if ($ParentID == false){
        $ParentID = IPS_CreateCategory();                                   // Kategorie anlegen
        IPS_SetName($ParentID, "Remotes " . $Kind);                         // Kategorie benennen
        IPS_SetParent($ParentID, $RootID);                                  // Kategorie einsortieren unter dem Objekt
    }
    while (true){
        curl_setopt($ch, CURLOPT_URL, 'http://'.$IP2.'/api/remotes?kind=' . $Kind . '&page='.$Page.'&limit=100');
        $response = curl_exec($ch);
        $Entities = array();
        $Entities = json_decode($response,true);
        if ((is_null($Entities)) || (count($Entities) == 0)) break;
        //var_dump($Entities);
        //return;
        $Page++;
        
        foreach ($Entities as $Entity){
            if (array_key_exists("de", $Entity["name"])){
                $Parent = @IPS_GetObjectIDByName($Entity["name"]["de"], $ParentID);
                if ($Parent == false){
                    $Parent = IPS_CreateCategory();                                     // Kategorie anlegen
                    IPS_SetName($Parent, $Entity["name"]["de"]);                        // Kategorie benennen
                    IPS_SetParent($Parent, $ParentID);                                  // Kategorie einsortieren unter dem Objekt
                }
            }
            else if (array_key_exists("en", $Entity["name"])){
                $Parent = @IPS_GetObjectIDByName($Entity["name"]["en"], $ParentID);
                if ($Parent == false){
                    $Parent = IPS_CreateCategory();                                     // Kategorie anlegen
                    IPS_SetName($Parent, $Entity["name"]["en"]);                        // Kategorie benennen
                    IPS_SetParent($Parent, $ParentID);                                  // Kategorie einsortieren unter dem Objekt
                }
            }
            if (isset($Entity["entity_id"]) && isset($Entity["entity_type"])){
                $UIDID = @IPS_GetObjectIDByName("UID", $Parent);
                if ($UIDID == false){
                    $UIDID = IPS_CreateVariable(3);                             // Stringvariable anlegen
                    IPS_SetPosition($UIDID, 10);                                // Stringvariable positionieren
                    IPS_SetName($UIDID, "UID");                                 // Stringvariable benennen
                    IPS_SetParent($UIDID, $Parent);                             // Stringvariable einsortieren unter dem Objekt
                }
                SetValue($UIDID, $Entity["entity_id"]);
                $TypeID = @IPS_GetObjectIDByName("Type", $Parent);
                if ($TypeID == false){
                    $TypeID = IPS_CreateVariable(3);                            // Stringvariable anlegen
                    IPS_SetPosition($TypeID, 20);                               // Stringvariable positionieren
                    IPS_SetName($TypeID, "Type");                               // Stringvariable benennen
                    IPS_SetParent($TypeID, $Parent);                            // Stringvariable einsortieren unter dem Objekt
                }
                SetValue($TypeID, $Entity["entity_type"]);
            }
            if (isset($Entity["options"]["kind"])){
                $Kind = @IPS_GetObjectIDByName("Kind", $Parent);
                if ($Kind == false){
                    $Kind = IPS_CreateVariable(3);                              // Stringvariable anlegen
                    IPS_SetPosition($Kind, 10);                                 // Stringvariable positionieren
                    IPS_SetName($Kind, "Kind");                                 // Stringvariable benennen
                    IPS_SetParent($Kind, $Parent);                              // Stringvariable einsortieren unter dem Objekt
                }
                SetValue($Kind, $Entity["options"]["kind"]);
            }
            if (isset($Entity["features"])){
                foreach ($Entity["features"] as $Feature){
                    $FeaturesID = @IPS_GetObjectIDByName("Features", $Parent);
                    if ($FeaturesID == false){
                        $FeaturesID = IPS_CreateVariable(3);                    // Stringvariable anlegen
                        IPS_SetPosition($FeaturesID, 30);                       // Stringvariable positionieren
                        IPS_SetName($FeaturesID, "Features");                   // Stringvariable benennen
                        IPS_SetParent($FeaturesID, $Parent);                    // Stringvariable einsortieren unter dem Objekt
                    }
                    $Features = json_encode($Entity["features"]);
                    SetValue($FeaturesID, $Features);
                }
            }
            if (isset($Entity["options"]["simple_commands"])){
                $SimpleCommandsID = @IPS_GetObjectIDByName("SimpleCommands", $Parent);
                if ($SimpleCommandsID == false){
                    $SimpleCommandsID = IPS_CreateVariable(3);                  // Stringvariable anlegen
                    IPS_SetPosition($SimpleCommandsID, 40);                     // Stringvariable positionieren
                    IPS_SetName($SimpleCommandsID, "SimpleCommands");           // Stringvariable benennen
                    IPS_SetParent($SimpleCommandsID, $Parent);                  // Stringvariable einsortieren unter dem Objekt
                }
                $SimpleCommands = json_encode($Entity["options"]["simple_commands"]);
                SetValue($SimpleCommandsID, $SimpleCommands);
            }
            if ($Entity["entity_type"] == "macro"){
                if (isset($Entity["options"]["sequence"])){
                    $MacrosID = @IPS_GetObjectIDByName("Commands", $Parent);
                    if ($MacrosID == false){
                        $MacrosID = IPS_CreateVariable(3);                      // Stringvariable anlegen
                        IPS_SetPosition($MacrosID, 50);                         // Stringvariable positionieren
                        IPS_SetName($MacrosID, "Commands");                     // Stringvariable benennen
                        IPS_SetParent($MacrosID, $Parent);                      // Stringvariable einsortieren unter dem Objekt
                    }
                    $string = '';
                    foreach ($Entity["options"]["sequence"] as $Sequence){
                        if (isset($Sequence["command"])){
                            $string .= $Sequence["command"]["cmd_id"] . ' , ';
                        }
                    }
                    SetValue($MacrosID, $string);
                }
            }
            $StateID = @IPS_GetObjectIDByName("State", $Parent);
            if ($StateID == false){
                $StateID = IPS_CreateVariable(3);                       // Stringvariable anlegen
                IPS_SetPosition($StateID, 50);                          // Stringvariable positionieren
                IPS_SetName($StateID, "State");                         // Stringvariable benennen
                IPS_SetParent($StateID, $Parent);                       // Stringvariable einsortieren unter dem Objekt
            }
            SetValue($StateID, $Entity["attributes"]["state"]);
            GetFurtherInformation($Entity["entity_id"], $Parent, $IP2, $Key2);
        }
    }
// cURL-Session schließen
    curl_close($ch);
}

function GetFurtherInformation($UID, $Parent, $IP, $Key){
$gfi = curl_init();
curl_setopt($gfi, CURLOPT_RETURNTRANSFER, true);
curl_setopt($gfi, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $Key,
    'accept: application/json'
]);
curl_setopt($gfi, CURLOPT_URL, 'http://'.$IP.'/api/remotes/' . $UID);
$response = curl_exec($gfi);
$Infos = array();
$Infos = json_decode($response,true);
//var_dump($Infos);
if (isset($Infos["options"]["simple_commands"])){
    $SimpleCommandsID = @IPS_GetObjectIDByName("Simple Commands", $Parent);
    if ($SimpleCommandsID == false){
        $SimpleCommandsID = IPS_CreateVariable(3);                      // Stringvariable anlegen
        IPS_SetName($SimpleCommandsID, "Simple Commands");                     // Stringvariable benennen
        IPS_SetParent($SimpleCommandsID, $Parent);                      // Stringvariable einsortieren unter dem Objekt
    }
    $string = '';
    foreach ($Infos["options"]["simple_commands"] as $SimpleCommand){
        $string .= $SimpleCommand . ' , ';
    }
    SetValue($SimpleCommandsID, $string);
}
curl_close($gfi);
}
?>

Viel Spaß Ralf