Hi, Sorry,
hab gerade erst mal wieder ins Forum geschaut und daher erst jetzt das gelesen.
Bisher habe ich keine Geräte mit Werten. Aber ich denke das ist nicht so kompliziert. Ich denke mir mal was aus und poste es in den nächsten Tagen.-
lG
XL
Hi, Sorry,
hab gerade erst mal wieder ins Forum geschaut und daher erst jetzt das gelesen.
Bisher habe ich keine Geräte mit Werten. Aber ich denke das ist nicht so kompliziert. Ich denke mir mal was aus und poste es in den nächsten Tagen.-
lG
XL
Hi,
ich habe basierend auf Eurem Script das ganze noch etwas verfeinert. Ich hoffe ich verletzt damit nicht Euer Copyright
Im Groben die Opmierungen….
Es ist nun eine true/false Variable vorhanden ist über die man die jeweilige Steckdose steuern kann und auf die auch das vis zugreift nun nicht direkt auf das Netio Webinterface.
Außerdem ist das ganze durch globale Variablen im Flow konfigurierbar, damit man nicht überall die Daten eingeben muß.
Ach ja und fehlerhafte Anfragen werden nun auch abgefangen. Bei nicht erreichbarer Steckdose hat er sonst false angenommen und bei Erreichbarkeit die Steckdose ausgeschaltet.
PS: Wenn Ihr die Objektvariable als boolean haben wollt, könnt Ihr den Type einfach im ObjektFenster --> Edit --> Raw (von type "state" auf "boolean" ändern) Node-Red kann das noch nicht festlegen.
PPS: Wenn es Euch gefällt würde ich mich über ein "Danke "freuen!
6134_netio_flow.txt
6134_flow.png
6134_netio_vis.txt
6134_netio_vis.png
Hi,
ich versuche nun schon seit zwei kompletten Tagen (Ja ich bin krankgeschrieben ) ein Problem zu lösen. Ich würde gerne die Pages (8081 8082 und 8083) über drei namebased proxy sites bereitstellen. Das funktioniert auch alles ohne Probleme. Aber auf der 8081 Seite gibt es unter Instanzen den button um auf die jeweiligen websites zu gelangen. Die Adresse wird durch die aktuelle augerufene seite plus dem port gebildet. z.B. "http://iobroker.extern.de:8082" das würde ich gerne umschreiben auf "https://irgendwas.extern.de"
Ich habe es über mod_sed, mod_substitute, und mod_html (mit ProxyHTMLURLMap) aber nicht funktionert!
Ich gebe aktuell auf und hoffe auf Eure Ideen.
lG
Willi
PS: die Proxys haben als Basiskonfiguration nur ProxyPass und PoxyPassReverse eingetragen.
Hi,
ich bin selbst draufgekommen und dachte vielleicht kann das script jemand das brauchen. Ist noch nicht alles 100%ig aber funktioniert schon mal grob.
Das Script macht ein interakive Menü um die Geräte zu steuern unter Telegram mit dem InboardKeyboard.
Die Idee war durch eine Gruppe die Berechtigungen hierfür zu vergeben.
lG
Willi
`var Devices = [
{ Name: 'Switch1', Ort: "Doppelgarage", an: true, aus: false, Objekt: "node-red.0.Strom1", Beschreibung: "Steckdose an der der Server angeschlossen ist"},
{ Name: 'Switch2', Ort: "Doppelgarage", an: true, aus: false, Objekt: "node-red.0.Strom2", Beschreibung: "Steckdose an der der Router angeschlossen ist"},
{ Name: 'Switch3', Ort: "Doppelgarage", an: true, aus: false, Objekt: "node-red.0.Strom3", Beschreibung: "Steckdose an der der KVM-Switch angeschlossen ist"},
{ Name: 'Switch4', Ort: "Doppelgarage", an: true, aus: false, Objekt: "node-red.0.Strom4", Beschreibung: "Steckdose an der der WLAN Accesspoint angeschlossen ist"},
{ Name: 'Garagentore', Ort: "Garage am Haus", an: true, aus: false, Objekt: "rflink.0.channels.Warema_3.BLIND_02", Beschreibung: "Garagentore öffnen und schließen"},
{ Name: 'Dom', Ort: "Wohnzimmer", an: true, aus: false, Objekt: "sonoff.0.Sonoff-S20-Nr1.POWER", Beschreibung: "Zwischenstecker an der das beleuchtete Kölnpanorama angeschlossen ist"},
{ Name: 'Zocklicht', Ort: "Zockzimmer", an: true, aus: false, Objekt: "sonoff.0.Sonoff-S20-Nr2.POWER", Beschreibung: "Zwischenstecker an der die kleine Lampe angeschlossen ist"},
{ Name: 'IPCam', Ort: "Doppelgarage", an: true, aus: false, Objekt: "javascript.0.IPCam", Beschreibung: "Zwischenstecker an der die kleine Lampe angeschlossen ist"},
];
function DistinctKeyValues(Array, Key) {
var unique = {};
var distinct = [];
for( var i in Array ){
if (!Array[i].selection) { continue; }
if( typeof(unique[Array[i][Key]]) == "undefined"){
distinct.push(Array[i][Key]);
}
unique[Array[i][Key]] = 0;
}
return distinct;
}
function ArrayDeselectKeyValues(Array, Key, Value) {
for( var i in Array ) {
if (Array[i][Key] != Value) {
Array[i].selection = false;
}
}
return Array;
}
function Array2ID(Array, Key, Value) {
for( var i in Array ) {
if (Array[i][Key] == Value) {
break;
}
}
return i;
}
function Key2Keyboard(Array, Key) {
Distinct = [], OuterArray = [];
Distinct = DistinctKeyValues(Array, Key);
for( var i in Distinct ){
InnerArray = [];
item = {};
item.text = Distinct[i];
item.callback_data = "___" + Key + ","+ Distinct[i];
InnerArray.push(item);
OuterArray.push(InnerArray);
}
return OuterArray;
}
function SwitchKeyboard(Array, Key, Value) {
Distinct = [], OuterArray = [];
Distinct = ['an', 'aus'];
for( var i in Distinct ){
InnerArray = [];
item = {};
item.text = Distinct[i];
item.callback_data = "___" + Key + ","+ Distinct[i];
InnerArray.push(item);
OuterArray.push(InnerArray);
}
return OuterArray;
}
function MenuFrageKey(Frage, Key, Array) {
MenuFrage(Frage, Array, Key2Keyboard(Array, Key));
}
function MenuFrageDevice(ID, Array) {
Objekt = Array[ID].Objekt;
Status=getState(Objekt).val;
if (Status === Array[ID].an) {
MenuFrage("Status von " + Array[ID].Name + ": eingeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
}
else {
MenuFrage("Status von " + Array[ID].Name + ": ausgeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
}
}
function MenuFrage(Frage, Array, KeyboardArray) {
sendTo('telegram.0', {
chatId: getState("telegram.0.communicate.requestChatId").val,
text: Frage,
reply_markup: {
inline_keyboard: KeyboardArray,
resize_keyboard: false,
one_time_keyboard: true
}
});
return;
}
function MenuAntwortDeselect(Array, Key, Value) {
MenuAntwort(Array, Key, Value);
ArrayDeselectKeyValues(Array, Key, Value);
}
function MenuAntwort(Array, Key, Value) {
sendTo('telegram.0', {
chatId: getState("telegram.0.communicate.requestChatId").val,
text: Key + ': ' + Value,
editMessageText: {
options: {
chat_id: getState("telegram.0.communicate.requestChatId").val,
message_id: getState("telegram.0.communicate.requestMessageId").val,
}
}
});
return Array;
}
on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
console.log("Received: " + command);
// Menü beginnen
if (command.toUpperCase() ==="MENU") {
//Reset previous selections
for( var i in Devices ){
Devices[i].selection=true;
}
MenuFrageKey('Wo willst du etwas tun?', 'Ort', Devices);
}
// Antwort verarbeiten
else if (command.startsWith("___")) {
command = command.slice(3,command.length);
var KeyVal = command.split(",");
var Key = KeyVal[0];
var Value = KeyVal[1];
if (Key == 'Ort') {
MenuAntwortDeselect(Devices, Key, Value);
MenuFrageKey('Welches Gerät willst du steuern', 'Name', Devices);
}
else if (Key == 'Name') {
MenuAntwortDeselect(Devices, Key, Value);
ID=Array2ID(Devices, Key, Value);
MenuFrageDevice(ID, Devices);
}
else if (Key.startsWith("*")) {
Key=Key.slice(1,Key.length);
ID=Array2ID(Devices, 'Name', Key);
setState(Devices[ID].Objekt, Devices[ID][Value]);
MenuAntwort(Devices, Devices[ID].Name, Value);
}
else {
console.log("Else: ___" + command);
}
}
else {
console.log("Else: " + command);
}
});` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
Hi,
ich versuche seit 2 Tagen ein Menü mittels Telegram aufzubauen. Ich scheite jedoch schon an der Rückmeldung.
Wie bekomme ich die Rückantworten des InlineKeyboards, damit ich diese weiterverarbeiten kann.
Mir ist wichtig, dass ich weiß das die Rückantworten vom Keyboard kommen, d.h. ich möchte ungern alle Rückantworten verwenden und mir die möglicherweise passenden herausfiltern.
Dies ist mein Ansatz, der jedoch keine Rückantwort bringt:
endTo('telegram.0', {
text: 'Wo willst du etwas tun?',
chatId: '-xxxxxxxxxx',
reply_markup: {
inline_keyboard: [
[
{text: 'Garage am Haus', callback_data: '1'},
{text: 'Doppelgarage', callback_data: '2'},
{text: 'Wohnzimmer', callback_data: '3'},
{text: 'Zockzimmer', callback_data: '4'}
]
],
resize_keyboard: true,
one_time_keyboard: true
}
});
on('callback_query', function (msg) {
answerCallbackQuery(msg.id, 'Knopf gedrückt', false);
console.log(msg);
});
lieben Gruß
Willi
PS: Ich bin mal gespannt wo ich "zu dämlich" bin