Stringeingabe im Webfront

Servus

Sagt mal steh ich auf dem Schlauch, oder geht das nciht.
Wie würdet ihr es lösen im Webfront einen BELIEBIGEM !!! Wert einzugeben.

Slider ist zu unpräzise, und alles andere kann ja nur diskrete Werte handhaben.

Dekadisch verschachtelte Wertelisten sind auch nur ein Notbehelf und brauchen so viel Platz.

Von mir aus auch als String.

verwundert
bb

Die Frage hat sich bei mir auch gestellt ! Ich hatte vor, keinen Designer / Dashboard mehr zu entwerfen, aber ich realisiere darüber die gesamte Heizungssteuerung und möchte auch mal Sollwerte verändern.

Gibt es hier eine Lösung?

Gruß Max

Zur Zeit über HTML eigenes Formular, später sicher über ein Editfeld. Lassen wir uns überaschen.

hi

ich wollt euch an meiner eigenentwicklung teilhaben lassen.
ich habe gesehen, dass mehrere gerne String-Variablen übers Webfront ändern würden.

Folgende Anleitung bezieht sich auf IPS 2.1. Gewähr übernehme ich nicht. Vorher ein Backup machen wäre sinnvoll.

Konventionen:
Es können nur Varablen von Instanzen geändert werden. Also wie in der Doku beschrieben eine Variable unterhelb eines Dummy Moduls erzeugen. Des weiteren muss ein ein Sktipt für die „Eigene Aktion“ eingestellt sein.
Das Skript sollte wie folgt lauten:

<?
 SetValue($IPS_VARIABLE, $IPS_VALUE);
?>

Ein neues Variablenprofil mit dem Namen „InPlaceEdit“ (bitte ohne Anführungszeichen und auf die Groß- und Kleinschreibung achten) muss erzeugt und der entsprechenden Variablen zugeordnet werden.

Nun müssen nur noch zwei Dateien wie folgt angepasst werden:

IP-Symcon\webfront\data\IPS.php
nachfolgendes bitte vor der Zeile case „doAction“: einfügen:

	
		case "doStringAction":
			$result = "success";
			if ((int)$_GET['VariableCustomAction'] > 0)
			{
				$linkedID = getLinkedID((int)$_GET['VariableID']);
				
				$vars = array();
				$vars['IPS_SENDER'] = "WebFront";
				$vars['IPS_VARIABLE'] = $linkedID;
				$vars['IPS_VALUE'] = utf8_decode($_GET['Value']);
				$vars['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR'];
				if ($linkedID != (int)$_GET['VariableID']) { $vars['IPS_LINK'] = (int)$_GET['VariableID']; }
				
				$cmdResult = encodeString(IPS_RunScriptWaitEx(getLinkedID((int)$_GET['VariableCustomAction']), $vars));
				if (trim($cmdResult) !== "")
				{
					raiseError($cmdResult, "");
				}
				else
				{
					echo prepareContent(array("sid"=>SID, "cmdResult"=>$result));
				}
			}
			break;

Nun zur zweiten Datei. Hier müssen zwei kleine Änderungen durchgeführt werden:

\IP-Symcon\webfront\webfront\modules\ips\BasicView.js

Zuerst muss folgende Zeile (ca. Zeile 965)

if (variableData.VariableType === 3 && variableData.VariableProfile.ProfileName === "~TextBox")

durch

if (variableData.VariableType === 3 && (variableData.VariableProfile.ProfileName === "~TextBox" || variableData.VariableProfile.ProfileName === "InPlaceEdit"))

ersetzt werden

Ca. zwei Zeilen darunter findet man folgende Zeile (ca. Zeile 967):

var bar = this.renderTextBoxBar(container.parentNode.id + "Bar", container, container.parentNode, variableData, value);

direkt nach dieser Zeile muss folgendes eingefügt werden:

if ( variableData.VariableProfile.ProfileName === "InPlaceEdit" ) {
				
					// ToDo:
					container.VariableIdent="DUMMY";
					var tempvalue = bar.firstChild.firstChild.innerHTML;
					dojo.require("dojo.parser");
					dojo.require("dijit.InlineEditBox");
					dojo.require("dijit.form.TextBox");

					bar.firstChild.firstChild.innerHTML = "<span dojoType=\"dijit.InlineEditBox\" title=\"\" onsave=\"alert(\"test\");\">" + tempvalue + "<script type=\"dojo/connect\" event=\"onChange\" args=\"value\"> var string = value; var utftext = \"\"; for (var n = 0; n < string.length; n++) {var c = string.charCodeAt(n); if (c < 128) {utftext += String.fromCharCode(c);}else if((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);}else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}value=escape(utftext); dojo.xhrGet({url: \"data/ips.php?ts=\" + new Date().getTime() + \"&do=doStringAction&InstanceID="+container.VariableInstanceID+"&VariableID="+container.VariableID+"&VariableCustomAction="+container.VariableCustomAction+"&VariableIdent="+container.VariableIdent+"&Value=\"+value, handleAs: \"json\", timeout: ((false) ? 0 : 30000),	load: function(response, ioArgs) { return response; }, 	error: function(response, ioArgs) { return response; }});</script></span>";

					dojo.parser.parse(bar);
				}

Abschließend beide angepassten Dateien speichern, „Webfront“ aktualisieren und bei einer Variable testen, die die obigen Konventionen erfüllt.

Zum Ändern der Variable einfach auf den Textinhalt im Webfront klicken, dass wird der Inhalt editierbar.

Für Rückfragen stehe ich gerne zur Verfügung.

Ich hoffe es funktioniert bei euch genauso gut wie bei mir :wink:

Gruß
Sebastian

Wenn das mal bei einigen nicht gewaltig in die Hose geht. :smiley:

wieso sollte es gewaltig in die hose gehen?
Also bei mir funktioniert es wirklich tadellos.

Hallo,

Idee finde ich gut.

Wäre vielleicht ein Ansatz für Horst um es beim kommenden Release in Webfront zu integieren.

@Horst: Wie stehst Du dazu?

Kannst du mal ein Bild dazu posten?

Ich vermute, dass die Lösung nicht Touchscreen kompatibel ist, oder?

paresy

Da wirft sich bei mir die Frage auf, wie definierst Du Touchscreen kompatibel??

Mit z.B. würde es reichen das Feld editierbar zu machen, dann die virtuelle Tastatur einblenden und gut ist … :slight_smile:

Grüße Andreas

Hier die Screenshots mit Erklärung:
(leider etwas groß)

So sieht es aus, vor dem Editieren

Zum Editieren einfach mit dem Finger auf den Text klicken (Roter Pfeil)

Intput-Feld erscheint

Nun kann mit der Onscreen-Tastatur im Feld der Text geändert werden

Der Rest folgt im nächsten Post.
Gruß

So und hier noch die letzten zwei Screenshots:

Einfach in einen freien Bereich vom Bilschirm klicken, das Eingabefeld schließt sich und die Eingabe wird gespeichert

Zeigt die neue, gespeicherte Eingabe

Also ich finde, dass es ziemlich touchscreentauglich ist :wink:

Gruß
Sebastian

gibts denn schon erfahrungen, obs auch bei anderen so reibungslos funktioniert?

Gruß
Sebastian

Hallo,

also die Lösung ist denke ich absolut Touch kompatibel … für mich absolut ausreichen :wink:

Leider hat die Lösung bei mir nicht funktioniert, aber ich arbeite auch nicht mit der 2.1 … leider …

Ich habe hier ca. 40 „Zeit“-Variablen, die ich über das Webfront bedienen möchte, zur Zeit habe ich das über 2-3 „Hilfs“-Variablen gelöst. Stunden, Minten als Integer, welche per Skript in die String-Variable geschrieben werden. Könnte also sicherlich 100 Variablen sparen, wenn ich die Werte so im Webfront editieren könnte freu

Grüße

Andreas

was genau geht denn nicht?

Hallo basti,

sehe ich das richtig das die zugeordnete Variable nach einem Klick in ausserhalb der Textbox aktualisiert werden oder ist noch ein weiterer Schritt notwendig?

Ja genau so ist es.
Es ist kein weiterer Schritt nötig.

Sollte man keine Änderung wünschen, so kann man die Textbox wieder mit Drücken auf die Taste Esc schließen. Oder einfach ohne eine Änderung gemacht zu haben irgendwo ins Freie klicken.

Webfront wurde garnicht mehr angezeigt … kann aber auch sein, dass ich einen Fehler gemacht habe … da war es ca halb zwei nachts.

Ich probiers am Wochenende nochmal aus …

Grüße

Andreas

Hi basti

der Patch hat hier leider auch nicht geklappt.

Ich verstehe in etwa wie dein Code funktioniert und habs auch exakt so eingebaut.
Dem Webfront ist es aber total egal. Da ändert sich nix. Die Variable wird nach wie vor gleich wie all anderen Varaiablen angezeigt (in Spalte ganz rechts, keine Editierbarkeit)

Ja, ich weiß es sieht so aus als ob der Variablentyp falsch wäre, ist aber nicht.
Die Variablentype ist richtig gesetzt - nein da ist auch kein Schreibfehler -.

Werde mal heute Abend weiter debuggen, vieleicht finde ich die Ursache.

trotzdem danke
bb

Jetzt gehts plötzlich !

Hab seit gestern abend nix geändert, grad eben den PC eingeschaltet und nun gehts.
Sehr merkwürdig.

Na egal, in jedem Fall danke vielmals für den Patch.
Werde gleich sehen wie ich mir damit eine nette Datumseingabe basteln kann.

mercy
bb

Ich hab es jetzt auch zum laufen gebracht …

für Nutzer der aktuellen Beta … in der Datei BasicView.js muss die folgenden Zeile

	if (!isParent && variableData.VariableType === 3 && variableData.VariableProfile.ProfileName === "~TextBox")

durch

if (!isParent && variableData.VariableType === 3 && (variableData.VariableProfile.ProfileName === "~TextBox" || variableData.VariableProfile.ProfileName === "InPlaceEdit"))

ersetzt werden. Ansonsten wie zuvor beschrieben.

Ich bin nach den ersten Tests total begeistert … mein Problem mit den Uhrzeiten im Webfront eingeben, ist gelöst. Wäre nur schön, wenn dieser minimale Patch offiziell ins Webfront aufgenommen würde. Was sagt Ihr dazu?? paresy, Horst ??

Grüße Andreas