[HowTo] SensorAndSwitch: Pseudoscript: PseudoGeräte selbst entwickeln.

Nun, so ne Ahnung hab ich verglichen mit Anderen auch nicht.
Das Dilemma ist wohl, je genauer man das erklären will, desto unverständlicher kommt man rüber.
Deswegen versuch ich es erstmal mit einfachen und später mit komplizierteren Beispielen.

Bei dir würde also eine einfache Auswertung des Returncodes so aussehen...
Code:
sudo pilight-send -p intertechno_old -i 0 -u 2 -t ; echo $?

Die Laufzeit des Kommandos so...
Code:
time sudo pilight-send -p intertechno_old -i 0 -u 2 -t

Aber ich halte ein sleep oder usleep für unnötig,
viel wichtiger ist wie sich das Programm pilight verhält.
Teste das mal in der Konsole.
Hängt die Konsole solange bis die Rollade unten ist?
Oder kehrt es sofort zurück?
 
also der Returncode ist 0
das System ist fast schneller da, als der Rolladen anfängt zu laufen.

time.PNG

Edit:
und deshalb denke ich die Pause zwischen den Befehlen ist wichtig.
der sendet sonst den 2. Befehl und der Funk ist mit dem ersten noch nicht fertig.
 
Zuletzt bearbeitet:
OK, beste Vorraussetzungen also.
Jetzt stellt sich mir die Frage ob piligt überhaupt nochmal aufgerufen werden darf/kann während die Rollade fährt.
Wenn das in der Konsole funktioniert dann auch im PHP, oder JL3 muss da nochmal ran.
Wenn es keine Macken der Geräte oder Programme ist.
 
Wie gesagt, im Netz findet man viele Hinweise, dass es Probleme gibt, dass wenn ein Rollladenmotor läuft, die Funksignale gestört werden. Ich denke, das pilight arbeitet korrekt, aber da es keine Rückmeldung bekommt, kann es auch keine Fehler liefern. Mach doch mal testweise den Versuch, die Reihenfolge der Läden zu ändern. Oder jede Minute ein Laden, aber dann erschlägt mich wohl gleich jemand für den Vorschlag... :mrgreen:

OT @ws65: Deine Nachbarn werden fasziniert dem Auf und Ab deiner Rollläden zuschaun. Bei mir ists aber ähnlich, wenn abends bei mir ständig beim Test die Lichter an und aus gehen. ;) /OT
 
Zuletzt bearbeitet:
ich denke da kann kein Pilight und kein PHP was dran ändern, das sind halt die Macken des 433Mhz Funk.
einfach etwes Zeit lassen und es wird schon gehen.
solange das im Sekunden Bereich liegt stört mich das nicht.
Es sind aber noch 2 weitere Rolladen geplant, und wenn ich auf Zeitabstände von 1 Munute ginge, würden 5 Minuten lang Rolladen rattern, was doch etwas stören würde.
mein Gedanke war daher alle auf einmal, nach ner Minute Ruhe!
Aber was nicht geht, kann man nicht ändern.

Edit:
mein Vorteil ist, das ich mich mit Elektroistallationen auskenne, besser als mi Linux.
wenn das auf Dauer so nicht richtig will, kommen da 5 Trennrelais rein und es wird nur mit einen Funkschalter gesteuert.
 
Zuletzt bearbeitet:
Jep, das ist auch eine Idee. ;)
 
Als Idee: Man könnte sich mit dem pseudoemail.php als Grundlage ein Script basteln, welches bei Eingang einer Mail mit bestimmten Betreff einen Pseudoschalter setzen, der dann in sasap abgefragt wird und dort als Schaltbedingung dient. Dies könnte auch je unterschiedlichem Betreff die verschiedensten Szenarien auslösen. Dies nur mal als Gedankenspiel...
 
hab mal wieder ein kleines Problemchen,

meine Funk Sachen funktionieren mittlerweile ja recht gut.
Vorraussetzung ist aber das der Pilight Server auf dem Raspi läuft!
Aber genau der hängt oder stürtzt schon mal ab.

habe mir deshalb ein Script gebastelt, welches den Pilight Server abfragt und wenn der nicht läuft, neu startet.

funktioniert soweit auch, nur meine ich das könnte man eventuell besser machen.
für Ratschläge wäre ich dankbar.

PHP:
<?php

	/*
	+---------------------------------------------------------------------+
	|                                                                     |
	|   SensorAndSwitch Automation Pro                                    |
	|   PseudoGeräte-Script                                 RaspberryPI   |
	|   ===============================================================   |
	|   prüfen ob Pilght Server läuft,                                    |
	|   wenn nicht starten !                                              |
	+---------------------------------------------------------------------+
	*/

	error_reporting(0);
	include "conf/sensorandswitchhelperurl.phpconf";            
	include "include/includedateien.php";
	include "include/includefunctions.php";
	include "include/includeconf.php";
	include "include/includeconfig.php";
	include "include/includedefine.php";

	$befehl='sudo pgrep pilight-daemon';

	$url=$helperurlpi."?befehl=".encodiere($befehl,33455);
	$Status=web($url,$post);
	$on=substr($Status,strpos($Status,"transmitted,")+4)*1;
	if ($on=="") {
		echo "P#".'Pilight Server läuft nicht'."*HTML#";
		echo "S#0#";
		$befehl='sudo service pilight restart';
		$url=$helperurlpi."?befehl=".encodiere($befehl,33455);
		$Status=web($url,$post);
#  wie komm ich hier wieder raus, oder besser nochmal zum Anfang ??				
		}
	else {
		echo "P#".'Pilight Server läuft '."*HTML#";
		echo "S#1#";
	}
	exit;
        ?>

mit der Abfrage 'pgrep pilight daemon' erhalte ich die besten Ergebnisse zum auswerten, zwei vierstellige Pid Nummern, die erste ist von Pilight selbst (auch noch vorhanden wenn Pilight nicht richtig funktioniert), die zweite ist vom Pilight-daemon, und fehlt wenn Pilight nicht richtig läuft!
 
Die Frage im Script: wie komme ich raus? Musst du nicht, da exit als nächstes abgearbeitet wird.
wie komme ich zurück? Bloß nicht, dann sperrst du sas.

Nachtrag: Eine Schleife im Script blockiert sasap. Der Cache wird nicht mehr erstellt und sas zeigt nur noch den alten Cacheinhalt an.
Niemals Schleifen in ein PseudoScript einbauen oder es sich selbst aufrufen lassen!
 
Zuletzt bearbeitet:
Danke,

dann kann ich das ja so lassen, wird ja beim nächsten cron Aufruf ja wieder geprüft.
hab Pilight mal extra gestoppt, wird vom Script wieder gestartet.
 
:doktor:
Niemals Schleifen in ein PseudoScript einbauen oder es sich selbst aufrufen lassen!
Das gilt aber nicht für Funktionsaufrufe. Und genau sowas hätte er zum Prüfen an dieser Stelle wohl gebraucht.
...denn es wird dort weitergemacht wo die Funktion aufgerufen wurde, wenn sie sich beendet.
Allerdings müsste im weiteren Verlauf die Rückgabe der Funktion beachtet werden (if).
 
Das gilt für alles, was den Ablauf des Scripts bremst.
Auch Funktionsaufrufe, auf deren Ergebnis gewartet werden muss!
 
Du meinst wie...
PHP:
web($url,$post);
...i agree. :D

Logisch müssen die Funktionen so schnell wie möglich arbeiten.
Sonst würden sie es doch nie in die Funktionsbibliothek schaffen.
 
Zuletzt bearbeitet:
Jep, auch die. Je weniger, desto besser. ;)
Ziel muss es sein, dass sasap unter 1 Minute Laufzeit bleibt.
Besser man erwähnt das einmal mehr als einmal zu wenig. Ich habe das einmal bei einer Testversion geschafft und da liefen zum Schluss mehr als 20 sasap und selbst der Zugriff über PuTTY wurde fast unmöglich.
In web(); ist zwar eine Sicherheitssperre eingebaut, aber wenn einer ein Dutzend in ein Pseudoscript packt... wird es eng. :mrgreen:

Nachtrag: Gerade web(); ist ein wirklich gutes Beispiel. Beschleunigen kann man es nicht, weil wenn es nicht etwas auf einen fernen Server wartet, kommt vielleicht nie ein Statuswert an. Wartet man solange, bis ein Wert ermittelt ist, kann dies wieder ewig dauern, wenn der Server vielleicht in dem Moment down ist. Daher hat web(); ein Sicherheitspuffer und bei vielen web(); sind schnell viele "Wartesekunden" beisammen, wo sasap am Weiterarbeiten gehindert wird. Lästiges Beispiel ist die Edimax-Dose. Ist sie nicht eingesteckt, ist ihr "Server" down und das Script wartet vergeblich auf Antwort. Das wird zwar durch den Sicherheitsmechanismus in der Funktion entschärft, aber ich denke mir, wenn einer ein Dutzend Edimax hat und die nicht antworten wirds auch eng. :mrgreen:

Nachtrag2: Mit den Funktionsaufrufen allgemein meinte ich aber auch hauptsächlich selbstgebastelte, die auf irgendwas ewig lange warten. Das nur oben zur Klärung. ;)
 
Zuletzt bearbeitet:
@JL3: ich habe hier ein Backup-Skript, welches bisher wunderbar lief, aber seit dem aktuellen Update nicht mehr. Es sieht so aus:

PHP:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                 RaspberryPI   |
        |   ===============================================================   |
        |   Datensicherung                                        sashelper   |
        |                                                                     |
        +---------------------------------------------------------------------+
    */

    error_reporting(0);
    
    # In der folgenden Datei sind die Variablen der sashelper mit Pfadangaben
    # benannt, wie z. B.:
    # $helperurlpi='http://192.168.123.123/sensorandswitch/sensorandswitchhelper.php';
   	include "include/includepseudo.php";

    echo 'P#<div style="position:relative;top:0px;font-size:16px;text-align:left">Raspi sichern/ruecksichern:</div><div style="position:absolute;top:-20px;font-size:14px;width:320px"><a href="doitdatenruecksicherung.php"><img src="'.picdesign("schalter1.png").'"></a></div><div style="position:absolute;top:-20px;font-size:14px;width:265px"><a href="doitdatensicherung.php"><img src="'.picdesign("schalterr.png").'"></a></div>*HTML#';
    exit;
    
?>


Es ist normalerweise ähnlich aufgebaut wie andere PI - Skripte. Mit 2 Schaltbuttons, einmal Datensicherung und einmal Datenrücksicherung. Funktionierte auch beides bisher.
Andere PI-Skripte funktionieren. Somit ist die SASHelper-conf auch korrekt.



Irgendeine Idee?
 
Ja, ich. :D
Wandle um in: UTF-8 ohne BOM
Dann kannste auch Konsonanten nehmen, zum Beispiel für: Raspi sichern/rücksichern:
...auch wenn du im Linuxeditor nur zwei Pünktchen angezeigt bekommst.

Das gilt für alle beteiligten Skripte.
 
Zuletzt bearbeitet:
Jep.

Es gibt noch einen "Trick", den ihr bitte nicht anwendet. Wenn man mit einem "#" in der Ausgabe beginnt, läufts auch mit BOM, aber das wäre nur von kurzer Dauer, weil das nicht "Versionenfest" ist. :mrgreen:
UTF-8 ohne BOM ist für alle Scripte die Devise. (Ich habe bei mir auch noch ein paar vergessen umzustellen...)
 
Super, koyaanisqatsi. Das war es!! Habts umformatiert und es ging wieder. Danke.

Jetzt klappt es wieder. Hatte das mit UTF8 ohne BOM zwar schon hier irgendwo gelesen, aber nicht gedacht, dass es direkt bei einem meiner Skripte eine Auswirkung hat :)


Nochmal zum Skript. Nur mal als Info was es macht:
Es packt mit dem Sichern-Button das komplette SAS in ein Archiv und schreibt es in ein anderes Verzeichnis. Dort liegen die anderen Archive mit Datum/Zeitstempel.
Das Aktuellste Archiv schickt mein Raspi mit dropbox-Uploader direkt in meine ********* (einfach mal als Test).
Mit dem Rücksichern Button, wird das aktuellste Archiv entpackt, der aktuelle SAS-Ordner umbenannt und es läuft "onthefly" einfach weiter.
 
Zuletzt bearbeitet:
Was wurde denn da zensiert? (*********)
Bei Unsicherheiten, wegen dem BOM UTF-8, einfach mal einen Konsonanten einbauen...
bom_konsonanten_01.jpg
...aber nicht so schamlos übertreiben. :mrgreen:
 
Zuletzt bearbeitet:
Hallo,
@Fred,
Kannst Du die Scripte einmal hier einstellen? :habenwol: Die Rücksicherung interessiert mich :mrgreen:
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.