SensorAndSwitch: Ideen Sammlung - Wunschliste

Ich bastle gerade an sogenannten Bedingungsschaltern, die auch mit der aktuellen Version funktionieren.

Diese bewirken z. B.: Erreicht ein Gerät oder Sensor einen gewissen Zustand, so schaltet sich dieser Schalter automatisch auf an, verliert er diesen Zustand, geht er wieser auf aus.

Beispiel: Außentemperatur größer oder kleiner 30°C. Der Pi spricht dann zu mir...

psgbsTemp30.php
PHP:
<?php
	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   Schalter                                                  (psg)   |
		|                                                                     |
		|   (C)2014/15 BlueDragon                                             !
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
	
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.00#";
    $Pfad=".";
    $Statusdatei=$Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status"; 
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$temp=$gerarray["Temp"];
	$xtemp=str_replace(".",",",str_replace("-","minus ",$temp));
	$info ="";
    
    $Status="S##E##";
    if (!file_exists($Statusdatei)) {
        $fp=fopen($Statusdatei,"w");
        $Status="S#0#";
        fputs($fp,$Status);
        fclose($fp);
    }

	$fp=fopen($Statusdatei,"r");
	$xml=fgets($fp);
	fclose($fp);
	if (strpos($xml,"1")) {
		$Status="S#1#";
	}
	if (strpos($xml,"0")) {
		$Status="S#0#";
	}

    if ($_GET["schalter"]=="1" or ($Status=="S#0#" and $temp>=30)) {
        $fp=fopen($Statusdatei,"w");
        $Status="S#1#";
        fputs($fp,$Status);
		fclose($fp);
		$befehl='sudo sage "Es ist draußen inzwischen heisser als 30 Grad Celsius geworden. Das Thermometer zeigt '.$xtemp.' Grad Celsius an." >/dev/null &';
		$url=$helperurlpi4."?befehl=".encodiere($befehl,33455);
		$Stspeech=web($url,$post);
    }
    if ($_GET["schalter"]=="0" or ($Status=="S#1#" and $temp<30)) {
        $fp=fopen($Statusdatei,"w");
        $Status="S#0#";
        fputs($fp,$Status);
        fclose($fp);
		$befehl='sudo sage "Es ist draußen inzwischen unter 30 Grad Celsius geworden. Das Thermometer zeigt '.$xtemp.' Grad Celsius an." >/dev/null &';
		$url=$helperurlpi4."?befehl=".encodiere($befehl,33455);
		$Stspeech=web($url,$post);
    }
    echo $Status.$ver;
	exit;
	
?>

Das unter $befehl stehende Kommando kann beliebig sein. ;)
(Nach der Installation von espeak habe ich mir einen Befehl "sage" gebastelt.)
Es wird durch das Script oben nur jeweils gesprochen, wenn das Ereignis eintritt.
 
Zuletzt bearbeitet:
Die Sprachausgabe funktioniert inzwischen recht gut und arbeitet mit SAS und den neuen psgbs nun anständig zusammen. Nachdem ich ein neues USB-Micro bestellt habe, werde ich noch einen Versuch mit Jasper und Sphinx unternehmen. Ich denke, mein jetziges ist zu leise und es kommt nichts Verwertbares bei Julius oder Sphinx an, sodass Jasper nicht vernünftig reagieren kann.

Wenn ich das zum Laufen bekomme, wird dies die SAS-Version 5 mit SensorAndSwitchKIAudio (Saskia). :mrgreen:

Inzwischen bastle ich an einem psgbs, das mir eingehende Mails mitteilt und gleich vorliest...
Die Möglichkeiten sind hier sehr vielschichtig.

Wer sich dafür interessiert oder weiterführende Ideen hat, kann hier dazu posten. ;)
 
Hallo JL3,

Ich habe da mal eine Idee für eine Vereinfachung der Eingabe der AIN - Nummer der Fritz!Dect200 in das Script "psgPi.php".

Da wahrscheinlich auch andere User das Script benutzen um einen 2. Raspberrypi auszulesen (Leitungsaufnahme, Temperatur u.s.w.)
und mit dem Script den RasPI ausschalten, ist mir eine Idee gekommen.

Könnte man die Eingabe der AIN - Nummer der Dect-Dose des 2. RasPI in ein Eingabefeld bei "Einstellungen" des Scriptes "psgPi.php" oder "psgHimbeere.php" einbauen.
(das Fenster in dem die Daten der Fritz!Box, Längengrad und Breitengrad, Zenit, Design u.s.w. eingegeben werden)

Damit würde der Wechsel zu einer anderen Dect-Dose die man für einen 2. RasPI benutzen möchte doch vereinfacht.

Der User müsste nicht immer mit einem Programm (z.B. Notepad++) das Script "psgPi.php" bearbeiten um mal andere Dosen zubenutzen oder zutesten.

Und mir ist noch eine Idee für ein weiteres Script (kann wahrscheinlich sein das es schon mal so einen Vorschlag gab, daher Nachsicht) gekommen das mit einem RasPi vielleicht zu machen wäre.

Ein "Countdown - Script" für eine Schaltdose (z.B. Dect200) in dem die Zeit Stunden und Minuten in einem Eingabefenster des Scripts eingegeben wird.

Nach dem Start mit einem Button wird die Zeit des "Countdown-Timer" rückwärtslaufend im RasPi Script im Browser anzeigt.

Im Script wäre vielleicht noch die Möglichkeit ein Button für sofortiges Beenden des Countdown oder kurze Unterbrechung des Countdown.

Gut diese Funktion gibt es zwar schon in der Fritz!Box selbst (Countdown für Schaltdosen) aber leider nicht mit Anzeige der Restzeit sowie den Button "sofortiges Beenden" des Countdown oder "kurze Unterbrechung" des Countdown in einem eigenem Fesnster im Browser.

Das sind nur Ideen für Scripte die vielleicht auch anderen Benutzern von SensorAndSwitch gefallen würden.

Gruss ElefantenMaus
 
Abgesehen davon, dass ich für die Restdauer des Höllensommers die Entwicklung von SAS weitgehend ruhen lasse, da man bei 40°C einfach keinen vernünftigen Gedanken fassen kann... :silly:

Eine Aufnahme eines Feldes für die AIN in den SAS-Einstellungen ist problematisch. Inzwischen rennen bei mir z. B. sieben Raspis jeweils mit eigenem psg. Es macht nur Sinn, Gerätespezifika im jeweiligen psg zu hinterlegen, sonst nagelt man den psg-Namen fest und das soll nicht sein.

Die Idee mit einem Countdown-Script wäre denkbar. Ich könnte mir dafür ein psgbs-Script vorstellen. "bs" steht hier für "bedingtes Schalten". Diese Scriptart ist jetzt für die neue Version verfügbar und eigentlich für die Steuerung der Sprachausgabe konzipiert, doch auch dafür verwendbar. Dieses Script wäre dann bei jedem Gerät anwendbar, also nicht nur bei DECT200. Da lasse ich mir noch was einfallen. ;)
 
Wäre es bei der Version 5 von SAS jetzt möglich die Idee mit einem
Countdown-Script aus Post #83 mit zu integrieren, damit viele Geräte
nicht nur die DECT200 das nutzen können.

Gruss ElefantenMaus
 
Das Thema ist nicht vergessen. ;)
 
Wunderbar, dann kann ich die Countdown-Festlegungen aus der Fritz!Box entfernen wegen mehrer DECT200 Dosen.
 
Gerade bin ich einmal diesen "Wunschliste"-Thread nach langer Zeit durchgegangen und frage mich, was denn davon noch gewünscht wird. Bitte ggf. hier nochmal dran erinnern. ;)

@ElefantenMaus: Das mit dem Countdown-psg habe ich immer noch nicht realisieren können. Mir fehlt noch der Ansatz es in die bestehende psg-Struktur zu integrieren. Ein Eingabefeld (für die Countdown-Dauer) in einem psg ist irgendwie nicht so die ideale Lösung. Mal sehen...
 
ich hab mich mit og. bisher noch nicht im Detail auseinander gesetzt, aber iBeacon ist doch bestimmt eine interessante Sache.
(Hardware gibt es hier anscheinend für interessanten "Kurs")
 
@informerex: Welches Anwendungsgebiet schwebt dir da vor? iBeacons sind ja "nur" Low Level Bluetoothsender, die ihre "Identität" abstrahlen. Da gehts mehr um Navigation im Raum per Smartphone-App. Vielleicht kannst du deinen Vorschlag etwas erläutern.
 
aus Sicherheits- und/oder Energiespargründen, will man evtl. das WLAN deaktivieren (wenn alle außer Haus) und automatisch aktivieren (wenn man nach Hause kommt).
die Fritz!Box bietet ja die Deaktivierung "bei keinem aktivem Gerät" an, jedoch das aktivieren muss manuell gestartet werden bspw. über Telefoncode bzw. über Fernwartung (da die Box nicht anders erreichbar)
im Bekanntenkreis macht dies niemand und somit läuft das WLAN 24h obwohl mind. 8 h bspw. niemand zu hause.

jedoch muss ich einräumen, ich hatte ein Denkfehler, denn dies wäre dann tatsächlich eher eine Smartphone-App Angelegenheit/Aufgabe.
 
Mittels DECT200: x-fach Händeklatschen aktiviert/deaktiviert WLAN ?
 
@informerex: Hm, man würde einen Sensor benötigen, der z. B. das Smartphone als in der Nähe erkennt. Für den Raspberry gibt es ja eine Unzahl von Sensoren. Das BT-Protokoll wäre zwar ideal, aber das Identifizieren des Smartphones - da müsste ich recherchieren, ob es dafür Bibliotheken gibt. Ein bspsg (bedingter Pseudoschalter) in SAS würde dann das Ein- und Ausschalten des WLAN übernehmen.

Falls da jemand entsprechende Bibliotheken kennt, bitte hier posten.

@MuP: Das würde nicht funktionieren, da die DECT200 über die Fritzbox geschaltet wird und WLAN ja dadurch nicht deaktiviert wird, wenn die DEKT200 den Strom abstellt. Einen Klatschsensor für den Pi gibt es. Damit ginge es, denn SAS kann das WLAN über Telefoncode per psg steuern. Leider habe ich keinen Klatschsensor. Ich steuere allerdings mein SAS per Spracherkennung. Sowas ginge auch, wenn der Letzte, der geht, SAS den mündlichen Befehl gibt "WLAN off" und beim Kommen "WLAN on".
 
mal ne Idee, Frage.

ich hab ja viele Funkschalter, wo ich den Status immer in eine Statusdatei schreibe.

wäre das möglich den Status in eine Systemvariable zu schreiben?
würden die Sripte dadurch eventuell was schneller?
muß ja bei jedem Aufruf der Status von SD-Karte neu geladen werden.

folgendes Teil des Scriptes mit lesen der Systemvariablen ersetzen.
PHP:
$Status="S##E##";
    if (!file_exists($Statusdatei)) {
        $fd=fopen($Statusdatei,"w");
        $Status="0";
        fputs($fd,"S#".$Status."#");
        fclose($fd);
    }
    if ($_GET["info"]=="status") {
        $fd=fopen($Statusdatei,"r");
        $xml=fgets($fd);
        fclose($fd);
        if (strpos($xml,"1")) {
            $Status="S#1#";
        }
        if (strpos($xml,"0")) {
            $Status="S#0#";
        }
    }

nur wie schreibt man die wieder neu, wenn sich der Schalter ändert?

wie gesagt, nur mal eine Idee, ob das was bringen würde, und ob das machbar ist, weiß ich auch nicht.
 
Wenn die Funkschalter keinen echten Status zurückliefern und man diesen sozusagen nur aus der Status-Datei erfahren kann, dann ginge, wenn man die Statusdatei durch eine Variable ersetzen würde, dieser bei einem "Himbeerreboot" verloren.

Ansonsten ginge das Ganze höchstens damit: http://php.net/manual/de/function.apache-setenv.php
Ich habe es noch nicht ausprobiert, weil es mir nicht wirklich sinnvoll erscheint, da das Lesen des Dateiinhalts keine nennenswerte Zeit kostet.

Systemvariablen lassen einen Child-Prozess übrigens keine Variablen des Elternprozesses verändern. Werden sie beendet, sind auch die (veränderten) Variablen weg.
 
Zuletzt bearbeitet:
hab heute mal bisschen getestet,
das speichern und schreiben der Statusdateien macht echt nichts aus.
das sind nur Millisekunden, fällt nicht ins Gewicht.

getestet hab ich mit dem Apache eigenen Testprogram "ab"
Beispiel:
PHP:
ab -n 100 http://192.168.178.20/sas4/psg/psgTest.php
lässt das Script 100* durchlaufen!

was mir aber bei meinen Test aufgefallen ist:
normales Schalt Script mit Statusdatei, braucht bei dem Test zwichen 60 und 80 Sekunden (bei -n 100).
hab dann einzelne Zeilen ausgeblendet, um fest zu stellen, was ist am langsamsten.
Volltreffer bei:
PHP:
include __DIR__."/../include/psg.php";
lass ich diese Zeile weg, brauch das Script bei 100 Durchläufe nur noch ca. 2 Sekunden!

weiter gesucht. im Script psg.php werden ja 4 weitere Scripts aufgerufen,
das langsamste dacon ist: geraete.php!

jetzt bin ich am überlegen, brauch man das include __DIR__."/../include/psg.php";unbedingt in jedem Script? müssen alle vier Scripts daraus in jedem psg Script sein?

hab mal Versuchsweise das include __DIR__."/../include/psg.php"; aus einem psg Script gelöscht, funktioniert bis jetzt auch ohne!

ist schon ein Unterschied ob ein Script ca. 70/100 = 0,7 oder 2/100 = 0,02 Sekunden läuft.

oder hab ich bei meinem testen wieder was übersehen?
geraete.JPGTest_ohne_include___.JPG
 
psg.php gibt dem PsG sämtliche SaS-Funktionen mit und ermöglicht so Zugriff auf alle Datenbankvariablen, Funktionen usw.
Natürlich funktioniert bei einfachen PsGs, wo die komplette Darstellung in der sas.psg (WebGUI) gehändelt wird, auch ohne psg.php-Einbindung, doch dann muss alles im psg-Script geregelt werden. Bei einfachen Pseudoschaltscripts ist das meist unproblematisch.

Trotzdem kann man es problemlos drinlassen, denn deine Rechnung oben berücksichtigt nicht die echte Netzabfrage und die ist pro PsG bei 1 bis 5 Sekunden und da interessieren 0,02 oder 0,7 Sekunden nicht wirklich. Grund ist der PHP-interne curl. Dieser hat eine große timeout-Spanne.

Demnach ist die Berechnung oben schon richtig aber entspricht nicht dem tatsächlichen Zeitaufwand per PsG im SaS.

Ich empfehle eher psg.php einzubinden, da man sich dann keine Gedanken über durchs Weglassen entstehende Fehlerquellen zu machen braucht.

Ist aber Geschmackssache und man kann es mit seinen PsGs austesten, ob es etwas spürbar bewirkt. Effektiv bringt ein Weglassen jedoch auch hier nur wenig Zeitvorteile. ;)
 
hab ich inzwischen auch festgestellt,

ganz einfache Sachen gehen ohne psg.php, aber wenns etwas mehr ist fehlt doch einiges!

da hilft nur eins, Pi-3 kaufen?
 
Bei mir läuft SaS inzwischen auf einem Pi 3B mit um die 100 PsGs, wobei ich zeitkritische PsGs mit psg-name-.php (mit Minuszeichen umschlossene PsG-Namen werden garantiert einmal die Minute ausgeführt) priorisiert habe. Mit einem Pi 2B läuft es aber auch noch rund. ;)
 
entweder habe ich es übersehen oder es gibt in der kleinen toolbox http://www.ip-phone-forum.de/showthread.php?t=287560
noch kein I2C/SPI Breakout Temperature Humidity Barometric Pressure BME280 Digital Sensor. Kann das sein er meldet sich mit

Er meldet sich mit 76 am i2c.

Code:
root@s6:~#  i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --


23 ist der Lichtsensor, das geht ;)

[wollte da nicht in dem oben angebenen thread zwischenfummeln und den thread "zerstören"]
 
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.