Programmierhandbuch

Hi xanon

Welche Themen sind denn für dich als Neuling interessant oder völlig unverständlich?

Gruss Patrik

PS: Klar da blick kein Newbie durch. :stuck_out_tongue:

Danke… Hab so ne Zeit lang als IT-Trainer meine Brötchen verdient. Ich war ansich auch ganz erfolgreich, aber ich bin halt doch mit Leib und Seele Progger.

Hab halt irgendwann die nächtlichen RedBull und Pizza Orgien vermisst. Der dunkle Raum wurde nur durch das bläuliche Licht des Monitors erhellt und der geschmolzene Pizzakäse tropfte auf die Tastatur während ich mit GOTO und PRINTLN gerungen hab… Ja, so hab ich angefangen :wink: Da war ich 13, was für eine Zeit g

Wir haben zum Teil so angefangen. Lernen durch Schmerz Wuhuhuhahahaha:eek:

Diese Frage ist garnicht so einfach zu beantworten.

Wie du schon sagtest, geht es den meisten leuten hier wohl um das verständniss der Programierung selbst.
-Wann muß ich ein Freizeichen lassen, wann nicht
-Wann muß ich ein (:wink: hinter eine Zeile setzten wann nicht…
Es gibt einfach zu viele fragen, die ich mir stelle.
Aber meistens habe ich das Problem, das wenn ich zwar weiß, wie der Befehl lautet, nicht weiß wie ich dieses in mein Skript einbauen kann.

Denn wie auch in Tonics kleines Tutorial steht: Das bedeutet es ist nicht egal in welcher Reihenfolge wir ihnen die Informationen geben.
Woher soll ich als Newbie nun wissen, in welcher reihenfolge ich was schreiben soll…
Manchmal ist es auch einfach unlogisch für mich, wie manche Scripte aufgebaut werden müßen.
Nehmen wir mal mein Script als beispiel (Im vordergrund nehmen wir mal "if & else):

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Nachhause_kommen.ips.php
Trigger  :
Interval :
*/

//Script einmalig fr 2 min. ausfhren
if ($IPS_SENDER == "TimerEvent")
{
SetValueBoolean("Alles_AN_Aus", true);
SetValueBoolean("Nachhause_kommen", false);
IPS_SetScriptTimer("Nachhause_kommen", 0); // nich vergessen...
ips_sleep(9000);
IPS_RunScript("Zeitansage_und_Outlook");

}
else
{
$dauer=60; // sekunden
FS20_Setintensity(35244, 16, 1);  // InstanzID der Stehlampe im Flur Beleuchtung
IPS_SetScriptTimer("Nachhause_kommen", $dauer);

DXMedia_Open(27787, "D:/Sprachbesttigung/Willkommen zuhause.wav");
// Abspielen der Sounddatei beginnen
DXMedia_Play(27787);
// Lautstrke auf 100% setzten
DXMedia_SetVolume(27787, 100);
ips_sleep(5000);

FS20_SetIntensity(52675, 10, 15); // TV Wandbeleuchtung hoch fahren
FS20_SetIntensity(46339, 16, 15); // Tischbeleuchtung Hoch Fahren
FS20_SetIntensity(59840, 16, 15); // Lichtschlauch hoch fahren

}

?>

Ich verstehe das „if & else“ so
if: Wenn der Sender gedrückt wird starte den „TimerEvent“ und mache weiter mit dem, was in den ersten klammern steht.
Trifft nichts von denen zu, nimm was in den Klammern nach „else“ steht.
Aber wo steht der Befehl, das er das wiederholen soll und erst dann das macht, was in den ersten klammern steht?

Anderes Beispiel:
Ich habe mal ganz von vorne angefangen und habe ein rechen beispiel von der seite http://www.php-dummies.de kopiert.
nun habe ich ein „if &else“ hinzu gefügt.
Rechenaufgabe ist 5+4=?
Ich will nun, wenn er mir sagt das das ergebniss 9 ist ein gewonnen als echo anzeigt. Was auch funktioniert

9Gewonnen

ändere ich jetzt den wert von if auf

if ($c = 15)
sollte er mir eigentlich anzeigen 9Verloren, was er aber nicht tut.
Wieso nicht?

Ich könnte jetzt ewig so weiter machen.
Aber letzendlich geht es wohl überwiegend um das „wie schreibe ich was“
Gruß
Xanon

OK,
Habe es kapiert!
der wert muß heißen:

if ($c == 15) // „==“ heißt Genau gleich

Wer lesen kann ist klar im vorteil .
Und dann klappts auch mit dem Ergebniss.

9Verloren

Ich muß noch eine Menge Lernen
Gruß
Xanon

Fast…

if ($IPS_SENDER == "TimerEvent") 

ist ein Vergleich. Das hat nichts mit „wenn gedrücht“ zu tun.

in IPS_SSENDER steht wer der das Script getriggert (erinnerst dich noch an das Wort?) hat. Wenn es der Timer (TimerEvent) war, dann soll er tun, was in den Klammern steht.

Der Timer kann aber nur der Sender sein, wenn du vorher einen ScriptTimer zum triggern gesetzt (engl. set) hast. das tust du hier:

IPS_SetScriptTimer("Nachhause_kommen", $dauer); 

Der Ablauf ist also wie Folgt:

[ol]
[li]Script wird durch irgendwen getriggert (zum Beispiel deine Taste an der Tür)[/li][li]Script stellt fest, dass „Taste“ nicht das gleiche wie „Timer“ ist und wandert in den else-Block[/li][li]Script setzt einen Timer auf 3 Minuten und führt Befehle aus[/li][li]Script ist beendet[/li][li]es passiert nichts[/li][li]Nach 3 Minuten triggert der Timer wie befohlen das Script[/li][li]Script stellt fest, dass der Sender diesmal der Timer war und springt in den ersten Block, den if-Block[/li][li]Script schaltet den Timer ab, damit er nicht in 3 Minuten schonwieder triggert. und führt weitere Befehle aus.[/li][li]Script ist erneut beendet. Diesmal endgültig. ;)[/li][/ol]
Steht alles in der Doku. Und mehr als dir die Informationen zur Verfügung zu stellen wird auch die „Task Force“, wie GGssss es genannt hat, nicht können :wink:

Toni

Jetzt hat es geklickt!
Vielen dank.
Du kannst echt super erklären!
Kann man dich auch Buchen :slight_smile:
Man, das nenne ich mal eine Beschreibung!
Gruß
Xanon

Kleine Korrektur bevor sich das obige jemand merkt:

== bedeutet nicht ‚genau gleich‘ sondern nur ‚gleich‘ (im Sinne eines Vergleiches)

=== bedeutet ‚genau gleich‘ -> hierbei werden sowohl die Werte als auch die Typen der Operanden verglichen

= und der Vollständigkeit halber ist das hier eine Zuweisung

Gruss,
Olli

Danke euch aber hierum geht es :

Meist fehlt es nicht an der Dokumentation sondern am Verständis zum programmieren.

Das verständniss möchte ich durch das task-force deutlich erklaren lassen an hand von ein vorbild und irgend eine grafische flowchart. So das neulinge das vermögen bekommen ihre satze „ich komme abends zuhause und möchte das lampe 1 angeht bis ich meine jacke abgemacht habe und im wohnzimmer rein gehe“ umgesetzt werden können in was sind die eingangs-variablen (ich komme zuhause) und die aufgeteilte logik (jacke ab - gehe in das wohnzimmer) und letzt endlich die lampe angeht.

PS:
Uebringens deine Erklärungen über if wenn else ect. sind sehr gut. nur so am rande.
Also eigentlich alles was du hier „Tonis kleines Programmierhandbuch - Ein Tutorial“ so geschrieben hast. Dieses könnte man wirklich ins Wiki übernehmen da hier im Forum eher übersehen wird.

[/QUOTE]
Das handbuch muss ins wiki ! punkt (wenn schon gestattet durch Toni - aber der hat sich schon gemeldet - und denke das das kein thema ist.

Anderes punkt : die beispiele sollen hardware unabhänglich dargestellt werden. Nicht jeden IPS nutzer hat zb. eine FHT. Also fast nur louter variablen nutzen um die hardware zu simulieren. (gibt es dan doch jemanden die hardware dazu hat - sollte er die möglichkeit haben diese zu nutzen im gleichen script.
und das war schon mal 3 ‚nutzen‘ im oberiger satz. Ich bin Belgier und spreche Niederländisch.

Danke an alle fur die feedback.

Also doch mal ehrlich (ich bin so) …

Ich habe da was Neues, das funktioniert irgendwie mit PHP (aha :smiley: ), also mal sehen.
Munter drauf los getippt (mmhh … geht gar nicht); fragen wir mal die Jungs mit der Erfahrung.
Die „Wartezeit“ auf die Antwort überbrückt man mit dem lesen der (für mich) zahllosen Dokumentationen (eigentlich verwirrt man sich damit nur noch mehr - „das“ wollte ich ja [noch] gar nicht wissen).

Der Lerneffekt des eigenen Fehlers ist größer als das angelesene Wissen.
Mit euren Antworten geht es (bei mir) wirklich schneller.

Ich kann gut damit leben, hier und da auch mal als „der Doof“ belächelt zu werden. Aber mit euren Antworten habe ich in vergleichsweise kurzer Zeit die ersten Erfolgserlebnisse. Dafür ein dickes Dankeschön.

Ihr könnt schreiben, was ihr wollt - ich werde (oder habe schon) es irgendwann lesen. Eure langjährige Erfahrung kann ich nicht aufholen, aber den Dummie-Status werde ich irgendwann verlassen (hoffentlich).

Anfänger-Gruß
von Uwe

@Uwe

Ok, ich glaub ich sag auch noch mal was zum Thema, da ich ja scheinbar den Stein ins rollen gebracht habe, mit meinem Kommentar. Ich bin selber im DV Umfeld tätig (wie Xanon richtig erkannt hat) Einer meiner VIP Kunden (Vorstandsmitglied) sagte die Tage folgendes zu mir (und er hat recht)

„Das ist ja schön das sie mir wieder bei meinem DV Problem helfen, aber dann kann ich es ja beim nächsten mal wieder nicht alleine !“

Genau hier liegt das Problem. Der eine möchte es gerne irgendwann alleine können, der andere läßt sich lieber (auch zum 1000’sten mal) alles von anderen machen.

Konsequenz daraus: Ist „der“ mal nicht da, hab ich alleine eine Problem.

Zweites Szenario: Ich erkläre gerne. Auch „triviales“ und auch gerne 100 mal.
Der „Empfänger“ bedankt sich und erwähnt eine „kleinigkeit“ nebenbei. Ich frage nach : „sag mal, wie hast du denn das gemacht? Würde mich auch interessieren“ und bekomm trotz mehrmaliger Nachfrage keine Antwort.

Da kann „einem“ auch schon mal die Lust verlassen.

Und meinen altklugem Satz " Nur wer sich selber hilft, dem wird geholfen"

möchte ich dann auch fairerweise ergänzen:

„Nur wer fragt, dem kann geholfen werden.“ (Also fragt ! ;-))))

Schönes Wochenende wünscht Obi …

Es geht ja auch garnicht darum, dass wir, um mal die „alten Hasen“ wieder ins Gespräch zu bringen, nicht mehr helfen wollen.

Und man muss ja auch nicht alles lesen, aber man könnte wenn man wollte. Und auch wen jetzt jemand daherkommt und ein Standard-Problem hat kann man sagen: Kannste hier (Link) nachlesen, statt sich 15-20 min hinzusetzen und einen Text zu verfassen.

Klar wird man nicht alles erschlagen können. Aber vielleicht eine Anleitung wie man sich selbst was beibringt, wie man eine Befehlsreferenz lesen muss. Ein erweitertes „kleines Programmierhandbuch“ vielleicht. Ich mag „Wissen“ immer gern in eine Art Geschichte verpacken fürs flüssige lesen. Aber nicht für jeden bringt dasden gewünschten lern-effekt. Jeder lernt auf eine andere Weise.

Ausserdem hat GGssss ja noch etwas generell erklährendes vor. Mal abwarten was er sich da vorstellt.

Toni

Das größte Problem ist am Anfang die Syntax, dann kommt das Verständnis der Variablen. Ohne die geht es nun wirklich nicht… :stuck_out_tongue:

Und dann noch den richtigen Befehl zur gesuchten Funktion finden… :confused:

Allerdings (ich habe das vor Kurzem in einem anderen Thread schon erwähnt) halte ich es für absolut notwendig, dass man als Neuling bei Problemen nicht einfach nur versucht das (möglicherweise nicht mal selbstgeschriebene) Programm durch Fragen im Forum irgendwie zum Laufen zu bringen, sondern sich erstmal mit den einzelnen Funktionen vertraut macht um diese zu verstehen.

Am besten mit einfachen „Einzeilern“ experimentieren, Parameter und Vars verändern und >>> daraus die Grundfunktion lernen.

Ich wette, jeder der heute hier helfende Antworten gibt, hat mal so angefangen. :smiley:

Und es kostet wirklich viel Zeit sich ein Problem hineinzudenken und dann eine Lösung anzubieten. Noch schwieriger ist es meist, die Lösung zu erklären…

Hut ab vor allen Helfern! Und viel Spaß beim Lernen! :wink:

Darum ja diese Idee.

Man könnte einen 1,2,3 Workschop aufbauen mit einer Sammlung von Einzeilern die dann jeweils nur ein Problem behandeln. Jeder einzelne Beitrag muss dann aber ausfühlich formuliert und erklährt werden. Nicht nur ein Kochbuch was einem sagt wie sondern vorallem auch das warum erklährt. Denn nur so kann das Verstäntnis keimen.

Je länger ich darüber nachdenke desto mehr gefällt mir diese Idee… Ich werd mir gleich mal die vorhandenen „ersten Schritte“ ansehen.

Toni

Je länger ich darüber nachdenke desto mehr gefällt mir diese Idee… Ich werd mir gleich mal die vorhandenen „ersten Schritte“ ansehen

Meine idee !

Toni… Ich schlage vor : wir fängen mal an damit und gucken wieviele sich noch anschliessen wollen im ‚Task-force‘

NUR : gesteren hat mein IPS-server die ewigen grunden aufgesucht und deshalb etwas ruckstand in mein ToDo liste

Einsteiger handbuch fertig im wiki.

Vorschlage zur erweiterung?
vermisse noch
*CASE - switch

  • SetValue…() zusammen mit [CTRL]+O variable-anzeige im script-editor
    *ECHO : lokaler debugging
    mit verweisung zum fprint() -> ganz wichtig wenn man mit interne script-events arbeitet.
    *änderen von variablen format float()$integer-var;
    *printf() formatiert

Andere basis-functionen die, wenn man die nicht bei nahmen kennt - und uberzeugt ist da die da sein sollen - frustriert rum browsed im php.net.

Sollte das einsteiger handbuch nicht zeigen wie eine instanz angelegt wird? Wie die variablen verknupft werden?
*Das erste nutliche script? Vorbild
*Das erzeugen von eine variable in IPS
*Dann das obene script uber ein variable triggern lassen und dann weiter eine variablen setzen und im variablen-bild mit die variablen spielen und gleich sehen das der andere sich ändert. (hier braucht man uberhaupt keine hardware fur !)
*Zeitgesteuertes ausfuhren
*Vielleicht ein vorbild uber FS20_switchduration(noob-id,5) und wiederum im variablen bild sehen das die andere variable indertat nach 5s. ändert.
*einfache spielereien

*dann vielleicht weiter mit einige beispiele zusammen mit hardware … aber welche hardware hat jedem ? FB ? FS20Schalter ? 1-Wire temp-sens? FHT?
Deshalb die ‚einfache‘ vorbilder lieber…

:smiley: Wenn ich das gerade uberlese stimmt die reihenfolge nicht
zb:

Sollte das einsteiger handbuch nicht zeigen wie eine instanz angelegt wird? Wie die variablen verknupft werden?

muss weiter runter

*dann vielleicht weiter mit einige beispiele zusammen mit hardware … aber welche hardware hat jedem ? FB ? FS20Schalter ? 1-Wire temp-sens? FHT?

Hiervor anlernen wie mann einem instanz anlegen in IPS. Können einfach 3 sorten nehmen FHT, FB, 1-wire und zeigen wie es geht.

Dann das script wieder änderen und laufen lassen uber HW-ausgang.

Und dann weiter mit eine RX-instanz (und auf gerade diesem zeitpunkt verzweifele ich ob es jetzt ein TX oder RX ist -> komme gerade mit die umgekehrte logik nicht hin „Wird er jetzt angesendet ?“ oder „bekommt er jetzt den wert“ - „aber wenn ist den ?“ :stuck_out_tongue:

weiter die variable im script oben, änderen durch die HW-trigger-variable. FB drucken -> lampe geht aus.

Weiter bedinggt schalten … if $lampe {ausschalten }else{ anschalten}

Timerwizzard (lampe schalten jede 5s)

Fb drucken … lampe schalten jede 5s bis nochmals gedruckt.

u.s.w.

Spielender weise hat man die erste schaltung gebaut UND !!! IPS kennen gelernt. Variable - Trigger - FS20-funktionen - instanzen, php und timer-faq.

Das sind IMHO doch DIE grösste anfänger fragen hier im forum ?

Und danach …

Gibt es ein kasten Bier von M & M geschenkt :smiley: Prost !

… aber die Anleitung würde ich nehmen.

Die Reihenfolge liest sich, als wäre sie für Anfänger wie mich gemacht.

Bitte, bitte - weiter machen :smiley:

Das ist sie :wink:

Ja, aber ich denke das sollte nicht da mit rein. Ein zweiter Punkt für Fortgeschrittene könnte das gut aufnehmen. Select Case wiederum gehört da mit dazu, da hast du recht.

Lass uns das trennen. Einmal PHP programmieren für Dummies und ein neues Thema in der Wiki der grafischen oberfläche von IPS. Dann auch konkreter. Nicht mehr mit Beispielen wie der Dampfmaschiene sondern reale Dinge zum nachmachen. Zum Beispiel eine FS20 Lampe schalten, dann zeitgesteuert schalten, dann hochdimmen bei Bewegung u.s.w.

Dazu könnte es dann vielleicht passend zu den Beispielen ein Einsteigerset im Shop geben mit IPS, der FHZ, einer FS20 Schaltersteckdose, einem PIRI und nem Dimmer… Also den Teilen die man benötigt um die Beispiele Nachzubauen.

Oder sollte man Beispiele bauen die komplett unabhängig sind von der Hardware? Wie könnte soetwas aussehen?

Toni