NEEO - The Thinking Remote

Hi Fonzo,

		$neeo_scriptid = $this->ReadPropertyInteger("NEEOScript");
		$this->SendDebug("NEEO Recieve:", "ScriptID: " . $neeo_scriptid, 0);
		if($neeo_scriptid != 0)
		{
			IPS_RunScriptEx($neeo_scriptid, ["action" => $action, "device" => $device, "room" => $room, "actionparameter" => $actionparameter, "recipe" => $recipe]);
		}

wenn ich das richtig sehe sollen hier die Forward-Scripte aufgerufen werden. Bei mir lierfert $neeo_scriptid aber immer 0. Mein VU-Problem habe ich jetzt quick&dirty durch einen Aktualisierungs-Trigger auf action vom Neeo-IO „gelöst“.

Es sollten auch nicht immer nur Device und Recipe sondern auch Room verglichen werden z.B. in GetRecipeUID denn Neeo hat die Eigenart alle Fernseher TV und alle Sat-Receiver satellite zu nennen und wenn man dann mehrere Räume bedient wird eventuell das falsche Gerät genommen.

Ralf

Hi ihr vielen Neeo Benutzer:-)

mit $action = ‚CHANNEL_1‘ … ‚CHANNEL_?‘ kann man auf die Favoriten von Neeo reagieren. Neeo schickt nicht die Kanalnummern!

Ralf

Nur zur Info falls Du mit Fernsehkanälen rumspielst, Du kannst die Icons die angezeigt werden austauschen.

Dazu eine Variable vom Typ String in IP-Symcon anlegen mit dem Variablenprofil ~HTMLBox. Anschließend ein Skript anlegen und hier die Objekt ID der soeben angelegten Variable ergänzen.


<?php

// Konfiguration

// Objekt ID HTMLBox Variable
$htmlbox = 16851 /*[Geräte\NEEO\NEEO Modul\NEEO Favoriten]*/;

// -- Ende Konfiguration
$html = '<!doctype html>
<html>

<head>
    <title>NEEO Favorites</title>
	<script>
	let dd = "";
function connect() {
	let brainIP = document.getElementById("brainIP").value;
	document.getElementById("Favorites").innerHTML = \'<h1>Connecting to \' + brainIP + \'...</h1>\';
	connectBrain(brainIP);
}
function connectBrain(brainIP) {
	fetch(\'http://\' + brainIP + \':3000/v1/projects/home/rooms/\').then(response => response.json()).then((configRooms) => {
		findFavorites(configRooms);
	}).catch(err => {
		document.getElementById("Favorites").innerHTML = "<h1>Can\'t connect to " + brainIP + "...</h1>";
		throw err
	});
}
function cl(cl) {
	console.log(cl);
}
function findFavorites(configRooms) {
	dd = "";
	for (let i in configRooms) {
		let room = configRooms[i];
		for (let j in room.devices) {
			let device = room.devices[j];
			if (Object.keys(device.favorites).length > 0) {
				printFavorites(device);
			}
		}
	}
	if (!dd == "") {
		document.getElementById("Favorites").innerHTML = dd;
	} else {
		document.getElementById("Favorites").innerHTML = \'<h1>This brain does not have any favorites configured...</h1>\';
	}
}
function printFavorites(device) {
	dd = dd + \'<div class="fieldrowh"><h1>\' + device.name + \'</h1></div>\'
	for (let i in device.favorites) {
		let favorite = device.favorites[i];
		dd = dd + \'<div class="fieldrow"><div class="imgbox">\';
		dd = dd + \'<span class="iconhelper"></span>\';
		dd = dd + \'<img class="icon" src="\' + favorite.channel.logoUrl + \'" id="\' + device.roomKey + \'a\' + device.key + \'b\' + i + \'"></div>\';
		dd = dd + \'<label class="channellabel">\' + favorite.channel.name + \'</label>\';
		dd = dd + \'<input class="urlinput" id="\' + device.roomKey + \'x\' + device.key + \'y\' + i + \'" type="text" value="\' + favorite.channel.logoUrl + \'"/>\';
		dd = dd + \'<button class="setbutt" onclick="seturl(\' + i + \', \' + device.roomKey + \', \' + device.key + \')" ><i></i>Update</button>\';
		dd = dd + \'</div>\';
	}
}
function seturl(id, roomKey, deviceKey) {
	let url = \'http://\' + document.getElementById("brainIP").value + \':3000/v1/projects/home/rooms/\' + roomKey + \'/devices/\' + deviceKey + \'/favorites/\';
	fetch(url).then(response => response.json()).then((favorites) => {
		favorite = favorites[id];
		let logoUrl = document.getElementById(roomKey + \'x\' + deviceKey + \'y\' + id).value;
		favorite.channel.logoUrl = logoUrl;
		let content = JSON.stringify(favorite);
		let http = new XMLHttpRequest();
		let purl = \'http://\' + document.getElementById("brainIP").value + \':3000/v1/projects/home/rooms/\' + roomKey + \'/devices/\' + deviceKey + \'/favorites/\' + id;
		http.open("POST", purl, true);
		http.setRequestHeader("Content-type", "application/json");
		http.onreadystatechange = function () {
			if (http.readyState == 4 && http.status == 200) {
				alert("Image is updated...");
				document.getElementById(roomKey + \'a\' + deviceKey + \'b\' + id).src = logoUrl;
			} else if (http.readyState == 4 && http.status != 200) {
				alert("Something went wrong...");
			}
		}
		http.send(content);
		cl(content);
	}).catch(err => {
		document.getElementById("Favorites").innerHTML = "<h1>Something went wrong fetching the favorite...</h1>";
		throw err
	});
}
	</script>
	
    
</head>
<style>
    .inforow {
        border: 2px solid rgb(250, 148, 32);
        background-color: rgb(245, 211, 178);
        border-radius: 4px;
        height: 150px;
        text-align: center;
        margin-bottom: 40px;
    }

    .fieldrow {
        height: 50px;
        background-color: #f9f9f9;
        border: 0px solid #fff;
        border-radius: 10px;
        position: relative;
        margin-bottom: 6px;
    }

    .icon {
        vertical-align: middle;
        max-width: 46px;
        max-height: 46px;
    }

    .iconhelper {
        display: inline-block;
        height: 100%;
        vertical-align: middle;
    }

    .brainip {
        width: 100px;
    }

    .urlinput {
        border: 0px solid #fff;
        border-bottom: 2px solid #ddd;
        background-color: #f9f9f9;
        border-radius: 4px;
        width: 700px;
        left: 70px;
        position: absolute;
        bottom: 2px;
    }

    .channellabel {
        top: 2px;
        position: absolute;
        left: 70px;
        font-family: sans-serif;
        font-size: large;
    }

    .imgbox {
        height: 50px;
        width: 50px;
        text-align: center;
        margin-left: 10px;
    }

    .setbutt {
        left: 800px;
        position: absolute;
        bottom: 14px;

    }

    h1 {
        font-family: sans-serif;
    }
</style>

<body>
    <div class="inforow" id="Info">Eigene Icons für Favoriten festlegen.
        <br>Nutzung auf eigenes Risiko.
        <br>
    </div>
    <div class="row" id="Connect">
        <div class="field row">
            <label for="brainIP">Brain IP address: </label>
            <input class="brainip" id="brainIP" type="text" value="" placeholder="192.168.0.10" />
            <button onclick="connect()">
                <i class=""></i>Connect</button>
        </div>
    </div>
    <div class="row" id="Favorites"></div>
</body>
</html>
';

SetValue($htmlbox, $html);

Anschließend das Skript einmal ausführen. Jetzt kannst Du im Webfront mit dieser Variable die Icons einsehen und bei Bedarf austauschen.

Hi Fonzo,
danke schau ich mir wohl Morgen mal an.

Noch eine kleine Ergänzung. Wenn „Das Erste“ auf Kanal 57 liegt dann wird dafür CHANNEL_57 als action geschickt. Bisher scheitere ich damit mehr als 30 Favoriten anzulegen:-(

Ralf

Falls es da eine künstliche Begrenzung gibt, wäre wohl die einzige Möglichkeit eine Liste zu nutzten, dann müste man aber ein NEEO Treiber schreiben das wird ziemlich umständlich.

Hi Fonzo,
Neustart vom Brain (Tipp von Daniel) hat geholfen.

Ralf

Hi,
Kann man das externded debug flag in den Forward Action Scripten abfragen um das Log File nicht unnötig voll zu müllen?

Ralf

Hi,
es gibt noch mehr Kommandos die von der Neeo geschickt werden:
„FUNCTION RED (LONG PRESS)“
„FUNCTION GREEN (LONG PRESS)“
„FUNCTION YELLOW (LONG PRESS)“
„FUNCTION BLUE (LONG PRESS)“

Ich benutze diese Funktionen sehr gerne bei meinen E2-Boxen. Langer Tastendruck bei der Neeo und Forwardaction geht leider nur bei 2 Tasten.

btw. mit letzter Firmware geht tatsächlich Multibrain auch im Zusammenhang mit dem Neeo Modul, d.h. Brain 1 schickt an Brain 2 und der schickt dann ans Modul.

Ralf

Wie funktioniert das genau mit Longpress? Legst Du die Befehle ins Display unter Favoriten? Auf die wenigen Tasten der NEEO kann man ja keine Befehle legen oder habe ich da was übersehen?
Leider hat die NEEO selber ja keine Hardware Tasten für Farben und so was wie Play, Stop habe ich auch immer irgendwie vermisst. Aber wenn man sich noch mehr Tasten wünscht hätte man ja am Schluss fast eine Harmony Elite :rolleyes:. SnapAV, der jetzige Eigentümer von ehemals NEEO, verkauft im übrigen Logitech als Lösung.
Wäre ja wirklich schön gewesen es hätte mal was als bezahlbare Alternative zur Logitech gegeben mit mehr Möglichkeiten.

Moin,

Ja aufs Display aber nicht bei den Favoriten. Anders geht es ja leider nicht:-(

Auf die wenigen Tasten der NEEO kann man ja keine Befehle legen oder habe ich da was übersehen?

Nein Du scheinst nichts übersehen zu haben. Mit der Neeo-App habe ich mich aber noch nicht so viel beschäftigt.

Wäre ja wirklich schön gewesen es hätte mal was als bezahlbare Alternative zur Logitech gegeben mit mehr Möglichkeiten.

ich bin von der Entwicklung auch ein wenig enttäuscht. Wäre ich Mitentwickler hätte ich vermutlich mehr Arbeit in die Software investiert. Mir fehlt z.B. eine LANG-Erkennung bei allen Tasten und vielleicht auch im Display und beim Display wäre was in Richtung Pronto was Flexibilität angeht sehr sehr nett gewesen.

Ralf

Hallo Fernbedienungsfreunde,

ich trauere ja immer noch meiner Philips Pronto hinterher. Interessanterweise lebt die Neeo weiter:

mit einem Control 4 OS3. Das würde ich gerne mit meiner Neeo testen; geht wohl nur über Control 4 Händler. Wie sieht es aber aus mit der Anbindung von Control4 zu IPS? Da gibts nix hier im Forum, wäre doch interessant.

Hi,
es steht nicht da das man seine „richtige“ Neeo upgraden kann. Ich kann mir nicht vorstellen das es geht. Falls doch wäre die Frage ob es die schönen ForwardActions noch gibt denn ohne wäre das Upgrade für micht ein Rückschritt.

Ist aber irgendwie auch eine Frechheit wenn das die „richtige“ Neeo mit einem Firmware-Update ist. Die Käufer des Originals mit einer halbfertigen Fernbedienung stehen lassen und dann sowas…

Ralf

So viel ich weis ist Control4 ziemlich geschlossen, wäre sonst blöd dann würde man ja alles über IP-Symcon machen und die nichts von ihrem Zeug verkaufen ;-).
Aber wenn Du die Muße hast gehe doch mal Inkognito zum Control4 Händler und lass Dich beraten, Du darfst dem nur nicht erzählen das Du so oder so schon alles im Haushalt steuerst und vernetzt hast, und im Zweifelsfall spüren lassen das Du vielleicht sogar mehr Ahnung hast von Hausautomation als der Verkäufer :rolleyes:.
Wenn es irgendeinen Weg dazu gäbe aus Control4 auch per TCP oder Webhook irgendwas zu steuern, würde ich ja vielleicht sogar in Control4 investieren, um die NEEO mit einer sinnvollen Benutzeroberfläche nutzten zu können.

Falls Du die tatsächlich zu einem Control4 Händler verirren solltest, würde mich folgendes interessieren

[ul]
[li]ist ein Update einer „alten“ NEEO Remote möglich, wenn ja was würde das kosten
[/li][li]was ist der Einstiegspreis um die NEEO Remote nutzten zu können und was muss man dann noch mindestens erwerben
[/li][li]gibt es eine Möglichkeit aus Control4 bzw. der NEEO auch Systeme anzusteuern die Control4 selber nicht unterstützt, indem man z.B. an ein Drittsytem Befehle per TCP, UDP oder Webhook schicken kann
[/li][/ul]
Wenn der allerletzte Punkt nicht gegeben ist und Control4 ein komplett geschlossenes System ist, haben sich die ersten beiden Fragen auch erübrigt, denn dann ist das System komplett uninteressant für mich.

Davon gehe ich fast aus dass das einfach „nur“ neue Software ist, die Hardware an sich war nie schlecht sonst hätte Control4 NEEO ja auch nicht aufgekauft, nur die Software war bis zum Schluss absoluter Murks und ist ja nie fertig geworden, wenn man nicht mal Hue Lampen ordentlich mit einem Colorpicker steuern kann. Interesse hätte ich ja schon mal daran zu sehen wie die neue Oberfläche jetzt aussieht. Wahrscheinlich kostet die „neue“ NEEO mit der neuen Software jetzt auch das dreifache :eek:.

Gi,
gibt es außer Fonzo und meiner Wenigkeit noch Anwender von Neeo hier? Wenn ja ist bei euch die Neeo Cloud erreichbar und könnt ihr IR Geräte hinzufügen?

Ich habe das Problem das ich wegen eine IPS-Limits mal wieder Geräte löschen musste und habe da übertrieben und alle Soundbars, Verstärker und TVs gelöscht weil ich die ja in Verbindung mit IPS und Harmony nicht benötige. Jetzt kann ich aber mit der Neeo selbst keine Aktionen mehr starten weil sie den Kabelsalat beheben möchte und anmeckert das ich weder TV noch Beamer drin habe. Gestartete Aktionen kann ich weiterhin steuern. Gibt es vielleicht eine andere Möglichkeit die Sache mit dem Kabelsalat zu übergehen?

Ralf

Ja :slight_smile:

Geht bei mir über die iPhone App noch.

LG Tom

Hi,
wow die Masse hat sich gemeldet:-)

Danke für die Info. Bei mir geht es auch wieder:-) Habe eben schon meine 20+ Rezepte wieder lauffähig gemacht.

Ich hatte vor einigen Tagen das Netzwerk-Kabel raus gezogen weil ich den Brain nicht per 2 IPs in meinem Netz haben wollte. Kabel wieder rein gesteckt und es lief wieder. Und jetzt habe ich auch meinen Fehler bemerkt. Wegen meiner Harmony-Experimente hatte ich auch den WiFi-Brain mal für das Internet gesperrt und es nach Monaten vergessen:-(

Ralf

Hi,
ich habe mal eine Frage bei der ich nicht weiß wonach ich das Internet durchsuchen sollte.

Auf dem Start-/Home-Bildschirm wird ja eine Liste der gestarteten Rezepte dargestellt (theoretisch). Ich habe das Problem das dort bei mir viele Rezepte auch angezeigt werden wenn ich sie starte einige Rezepte aber nicht. Ich habe da noch keine Logik gefunden woran es liegen könnte.

Hat hier jemand eine Idee?

Ralf

Hi,
Hue in Neeo. Ich hatte bei meinen Anfängen letztes Jahr Speicherprobleme in IPS und stieß schnell an eine feste 1MByte-Grenze. Mittlerweile bin ich der Meinung das es daran lag das ich Hue in Neeo drin hatte. Da ich Hue nicht mehr mit Neeo pairen konnte, warum auch immer, habe ich es raus geschmissen und steuere Hue auch per Neeo über IPS. Seit Hue aus Neeo draußen ist habe ich schon ca. 6 neue Räume und 12-14 neue, teils große (Enigma2), weitere Geräte in Neeo eingebaut und IPS meckert noch nicht.

Hue in Neeo scheint ein ziemlicher Speicherfresser zu sein.

Ralf

Hallo Zusammen,

bei mir wurde heute ein Firmwareupdate auf Version 0.53.9 angezeigt. Dazu finde ich nichts im Netz. Weiss jemand, was sich da ändert? Ich bin erstmal vorsichtig damit.

Gruss
TK