Export von Skripten mit der erweiterten Anzeige

Gerade beim Teilen von Codeteilen oder Skripten muss sehr viel Aufwand betrieben werden, diese für andere im Forum verständlich zu machen, weil ja nur die ID’s und nicht die erweiterte Anzeige bei coyp&paste kopiert wird. Ich würde mir die Möglichekt wünschen, ein Skript auch mit der erweiterten Anzeige wie im Editor kopieren zu können.
Was gerade im Forum doch etwas nutzerfreundlicher und leserlicher wäre.

1 „Gefällt mir“

Ich weiß nicht, ob dir mein Tip zu dem Thema gefallen wird aber ich schreibe ihn mal trotzdem:

a) PHP-Module sind viel besser. Egal ob im Store oder per GitHub. Dass nicht jeder den Aufwand machen möchte oder so „gut“ programmieren kann (oder lernen will, denn es ist wirklich machbar) ist total verständlich. Deswegen gibt es auch den nächsten Tipp.

b) Bevor es PHP-Module gab, hat man für fast alles Skripte verwendet - diese jedoch so gebaut, dass diese Portabel waren und jeder per Copy&Paste alle Informationen hatte und einfach auf „Ausführen“ drücken konnte.

Dazu gab es ein paar Klassiker, welche man am Skript immer hinten dran hatte und einem die Arbeit abgenommen haben. Sowas hier z.B. zum Erstellen von Variablen. Das selbe gibt es überall im Forum verteilst für Skripte, Medien, Kategorien…

function CreateVariableByIdent($id, $ident, $name, $type)
{
	$vid = @IPS_GetObjectIDByIdent($ident, $id);
	if($vid === false) {
		$vid = IPS_CreateVariable($type);
		IPS_SetParent($vid, $id);
		IPS_SetName($vid, $name);
		IPS_SetIdent($vid, $ident);
	}
	return $vid;
}

Ich vermute also, dass wir diesen Wunsch nicht umsetzen werden, da er einen Workflow unterstützt, welcher unserer Meinung nach suboptimal ist. Wenn es zwingend notwendig ist, dass du IDs hardcoded verteilst, müsstest du manuell Kommentare setzen.

paresy

Nein, gefällt mir jetzt nicht und auch die automatische Anlage von allem Möglichen ist in Wahrheit keine befriedingende Lösung. Und nein, für mich alleine mach ich keine Module und ich möchte mich da auch gar nicht einlesen.
Vorallem gehts mir dabei um Ideen um z.b. bestehende Geräte miteinander logisch zu verbinden. Siehe mein Garagentor. Ja sicher könnte man ein Modul bauen, in dem man die Sensoren und den Schalter definiert. Aber für was? Für mich alleine sicher nicht.
Egal, wenn es so ist, dann ist es so. Ich kann damit für mich leben.

Das ist die einzige befriedigende Lösung :slight_smile:
Genau so schreibt man ein Script zum teilen.
Oder, falls du z.b. IDs für irgendwelche speziellen Instanzen (Archiv, WebFront usw…) oder Objekte (z.b. Kategorie wo etwas passieren soll, deine Variable vom Garagentor usw) wirklich Hardcore willst. Dann diese am Anfang in eine PHP Variable schreiben und dahinter/drüber einen erklärenden Kommentar was hier konfiguriert wird.
Michael

<Unverschämt ein>
Ich hätt da eine spontane Idee - könnt ihr mir nicht am Beispiel meines PHP Codes im Thread ,Anbieter Awattar - Hourly Preise darstellen‘ zeigen wie ich daraus ein Modul erstelle?
<Unverschämt aus>

Also mir fehlte bisher immer irgendwie die Zeit mich da wirklich einzuarbeiten, habe schon mal einen Versuch gemacht … aber für mich alleine lohnt das nicht… oder sehe ich das wirklich falsch?
Siehe oben, bin bereit für den nächsten Versuch :sunglasses:

Gruß Michael

Schönes Beispiel, wo ich kein Modul draus machen würde.
Da reicht es einfach noch die ID vom Archiv anstatt statisch diese durch IPS_GetInstanceByModuleID zu ermitteln.
Die eine Variable mit dem Code oben zu erstellen. Das loggen der Variable zu aktivieren.
Und vielleicht noch den Timer im Script automatisch zu erstellen.
Für ein Modul wäre mir das zu viel Overhead. Gibt ja auch nichts zu konfigurieren :wink:
Michael

Schade… jetzt hatte ich mal die Hoffnung meinen Horizont zu erweitern :wink:
Aber ehrlich, bisher scheiterte ich an den Berührungsängsten… wäre der Aufwand wirklich zu groß das ein Modul draus zu machen?
Michael

Aufwand weniger. Wie gesagt, ich würde daraus kein Modul machen. Es hat weder einstellbare Parameter, noch benutzt es den Datenaustausch mit anderen Instanzen oder andere Funktionen welches es für ein typisches Modul auszeichnen.
Michael

Ich hab für mich jetzt eine persönlich gangbare und gar nicht so aufwendige Methode gefunden. Ich frag mich, warum ich nicht schon vorher draufgekommen bin, macht es die skripts meiner Meinung nach auch lesbarer und bei sehr langen „Zusatzinformationen“ der ID’s auch übersichtlicher.
Ich definiere ganz einfach am Beginn des Skrpts Variablen mit den im Skript verwendeten ID’s.
z.b. ein Aktionskript

<?php
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
/*
0 ist öffnen
4 ist schliessen
Sensor geschlossen=false, offen=true 
*/
$status_garage_oben=23046;
$status_garage_unten=10094;
$vorgang_aktiv=56309;
$steuerung=20862;
$status_relais=54558;
$wartezeit_zwischen_signalen=36270;

$signalschicken=true;

if ($_IPS['VALUE']==0 and getvalue($status_garage_oben/*Status Garage Oben*/)==false) $signalschicken=false;
if ($_IPS['VALUE']==4 and getvalue($status_garage_unten/*Status Garage unten*/)==false) $signalschicken=false;
//bei stopp nichts machen
if ($_IPS['VALUE']==2) $signalschicken=false;
if ($_IPS['VALUE']==0)
{
    $status="geöffnet";
}
else
{
    $status="geschlossen";
}
if ($signalschicken)
{
    setvalue($vorgang_aktiv/*Vorgang aktiv*/,true);
    IPS_SetDisabled($steuerung/*Steuerung*/,true);
    /* signal an relais schicken*/
    RequestAction($status_relais/*Status*/, true);
    ips_sleep(getvalue($wartezeit_zwischen_signalen/*Wartezeit zwischen Signalen*/));
    RequestAction($status_relais/*Status*/, false);
    Global_Log_Eintrag_erstellen("Notiz","Garage","Garagentor wird ".$status."!");
}

Du erfindest also Dinge, die seit Jahren gängige Praxis sind.

Interessante Beschäftigung

:grinning:

Sieh es anders: Jemand der neu ist, hat für sich eine gute Lösung gefunden und diese passt auch hervorragend zu dem, was wir hier in der Community machen :slight_smile:

paresy

Hehe. Ich sehe das sportlich :wink:
Aber vielleicht ist ja mein Rad runder als das der anderen :smiley:

Ups, da hab ich mich von der Anzeige „Senior Member“ in die Irre führen lassen.

Aber ich freue mich immer über rundere Räder. :smile:

Bleibt gesund Leute und wenn ich dem lockeren Stil geantwortet wird, finde ich es prima.

Das sagt nicht so viel über meine Programmierskills (we es so schön auf Neudeutsch heißt) aus. Ich mach zwar meine Skripts aber sicher teilweise mit der Kirche ums Kreuz. Und wenn ich was nicht weiß, dann hilft das Forum oder Google.
Solang ich zu dem komme, was ich mir vorstelle passt es aber für mich.

Ps.: Außerdem passt der Senior zu meinem Alter :wink:

So war das auch nicht gemeint.

IPS Skripte sind ja doch speziell und man muss haben einige Besonderheiten.
Darauf muss man sich auch einlassen.
Das fällt dem Erfahrenen sicher leichter.

Ich bin ja selbst nur Anwender. Hab zwar auch mehrere Programmiersprachen berufsbedingt erlernen und anwenden dürfen aber meine Leidenschaft wurde es nie.
Daher hatte ich auch nie Lust, mich so richtig in die Programmiertiefen von IPS reinzusteigern.
Muss man auch nicht, wenn man mit der Materie umgehen lernt und das Forum als Quelle nutzt.
Es hilft aber sehr, wenn man sich im Forum etwas breiter auskennt, um nicht auf jeden dargestellten Codeschnipsel reinzufallen. Dafür wurden auch mal die wichtigen Scriptbeispiele zusammengefasst.
Ich selbst bediene mich gerne bei den Beispielen in der Doku. Die sind überwiegend aktuell und man fällt nicht so oft auf längst überholte Altlasten rein.

Kein Thema. Ich bin selber sehr IT affin :wink: und mir macht es sehr viel spaß hier in PHP herumzuwerken. Mit derZeit komm ich immer mehr drauf, was IPS auch ohne PHP kann. Da sind mir schon ein paar Sachen aufgefallen, die ich dann auch weider zurückgebaut hab.