[Frage] SensorAndSwitch: Raspberry: Bitte um Hilfe bei Pseudoscript-Erstellung

Ja, das geht. Wenn dein Smartphone eine feste IP oder einen anpingbaren Namen hat, kann man sich ein Pseudogeräte-Script basteln, das testet, ob es im Netz ist (istOnline()) und dann SensorAndSwitch Automation bei positivem Ereignis die DECT200 schalten lassen.

Mal auf die Schnelle ohne Gewähr:

pseudosmartphoneauto.php

PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   PseudoGeräte-Script                                 RaspberryPI   |
		|   ===============================================================   |
		|   Smartphone                                              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 "conf/sensorandswitchhelperurl.phpconf";
	
	include "include/includedateien.php";
	include "include/includefunctions.php";
	include "include/includeconf.php";
	include "include/includeconfig.php";
	include "include/includedefine.php";

	$smartphoneip="192.168.nnn.nnn"; #entsprechend abändern
	if (istOnline($smartphoneip,80)) {
		echo "S#1#";
	}
	else {
		echo "S#0#";
	}
	exit;
	
?>

Im sasap nun eine Schaltbedingung erfassen, die bei Schalter an, die Steckdose anschaltet.

Hoffe, das hilft dir weiter. :)


Nachtrag: Bin mir nicht sicher, ob dein Smartphone auf port 80 reagiert, kann es aber leider auch nicht testen.
 
Zuletzt bearbeitet:
Wer die neuen Icons jetzt schon haben möchte:
(es ist das komplette images/)
 

Anhänge

  • neueicons.zip
    920.2 KB · Aufrufe: 4
Hallo,
Thx :D. Die Schalter/Symbole sind klasse :mrgreen: Eine Frage hätte ich:
Müssen die Dateinamen egentlich eingeblendet werden? Irgendwie finde ich sie ein wenig störend Anhang anzeigen 79922 :weg:
 
Jep, die Gerätenamen müssen bleiben, sonst gibt das Verwirrung. Wähl dir einfach aussagekräftige kurze Namen.
 
Hallo JL3,
danke Dir für Deine schnelle Hilfe.

Leider funktioniert Dein Skript nur wenn auf dem Netzwerkgerät ein Webserver auf den entsprechenden Port 80 reagiert. (Hattest du auch geschrieben.)

Via PING vom Raspberrypi ist das Smartphone erreichbar. Leider gibt es bei einem Ping keinen festgesetzten Port, welchen ich verwenden könnte.

Ich habe nun das Problem einen Port zu ermitteln auf welchen das Smartphone reagiert. Hast Du vielleicht einen weiteren Tipp?
 
Zuletzt bearbeitet:
Hier eine andere Lösung mit Ping:

PHP:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                 RaspberryPI   |
        |   ===============================================================   |
        |   Smartphone                                            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 "conf/sensorandswitchhelperurl.phpconf";
    
    include "include/includedateien.php";
    include "include/includefunctions.php";
    include "include/includeconf.php";
    include "include/includeconfig.php";
    include "include/includedefine.php";

	$geraet="IP-Adresse oder Gerätename"; # ändern
 	$befehl='sudo ping -w 2 '.$geraet;
	$url=$helperurlpi."?befehl=".encodiere($befehl,33455);
	$Status=web($url,$post);
	$on=substr($Status,strpos($Status,"transmitted,")+12)*1;
	if ($on!=0) {
		echo "S#1#";
	}
	else {
		echo "S#0#";
	}

    exit;
    
?>

Damit kann man jedes Gerät im Heimnetz testen, ob an oder aus.
 
Hallo JL3,
Leider funktioniert das Programm #147 nicht. Der PseudoSchalter reagiert auf keine IP Adresse. (Habe sogar versucht die FritzBox mit Namen oder IP-Adresse einzutragen. Schaltzustand ist immer AUS.)
Wenn ich sudo Ping -w 2 192.168.1.nnn direkt im raspberrypi aufrufe, antwortet das entsprechende netzwerkgerät sofort.

@koyaanisqatsi
Danke für Deine Hilfe, der in #149 von Dir erstellte PHP-Code, tut genau was er soll :)
(Damit ist meine Anfrage zur Erkennung von An- und Abwesenheiten von Netzwerkgeräten gelöst)
 
Zuletzt bearbeitet:
Moins

@sascha5874: Vielleicht hilft in diesem Fall: arp
Auf dem RasPi also mal beobachten, ob arp zum Erkennen tauglich wäre.

Wenn die Zeiten des Auftauchens und Verschwinden des WLAN Gerätes zeitnah geschehen,
wäre arp besser geignet als der Test auf IP:pORT.

Ein Pingtest wäre aber auch nicht verkehrt.
Vielleicht sogar besser, weil Geräte mitunter verspätet im arp Cache auftauchen.
"Geben sie mir einen Ping, Vasily. Und bitte nur ein einziges Ping". :mrgreen:
Code:
ping -c 1 -W 1 192.168.178.1 >/dev/null;[ $? -eq 1 ] && echo "S#0#" || echo "S#1#"
Der Returncode $? von ping wird im obigen Beispiel (if/then/else Kurzform) ausgewertet:
1 = Nicht da (Laufzeit = 1 Sekunde) Ausgabe dann: S#0#
Ansonsten = Da (Laufzeit < 1 Sekunde) Ausgabe dann: S#1#

Oha, vergiss arp.
Pings auf nicht existente IPs tragen die als <incomplete> in den arp Cache ein.
Also ist arp eher als ungeeignet anzusehen.

Am End kommt eigentlich ein simples Pseudoskript dabei heraus.
pseudoping.php (Sensor)
PHP:
<?php // Pingtest auf vorhandensein einer IP
if ($_GET["info"]=="status") {
$Status=shell_exec('ping -c 1 -W 1 192.168.178.1 >/dev/null;[ $? -eq 1 ] && echo -ne "P#0*Offline#" || echo -ne "P#1*Online#"');
}
echo $Status;
?>
(Getestet auf [email protected])
Brauchst es nur noch anpassen: Name (pseudosmartfon.php), sudo, IP ändern und gut ist. ;)
Wenn es dann bei dir zuverlässig läuft, erstellst du ein Kettenstartglied...
sensorandswitchautoproui.php
Neu
1. Pseudosensor
2. Wenn Gerät Smartfon gleich 1
3. dann schalte von WASAUCHIMMER den Schalter ein

...und das Selbe nochmal fürs Auschalten...
sensorandswitchautoproui.php
Neu
1. Pseudosensor
2. Wenn Gerät Smartfon gleich 0
3. dann schalte von WASAUCHIMMER den Schalter aus

...happy coding
 
Zuletzt bearbeitet:
Hallo JL3,
Leider funktioniert das Programm #147 nicht. Der PseudoSchalter reagiert auf keine IP Adresse. (Habe sogar versucht die FritzBox mit Namen oder IP-Adresse einzutragen. Schaltzustand ist immer AUS.)
Wenn ich sudo Ping -w 2 192.168.1.nnn direkt im raspberrypi aufrufe, antwortet das entsprechende netzwerkgerät sofort.
Dass es nicht läuft kommt daher, dass du vermutlich nicht wie im Script beschrieben die Datei conf/sensorandswitchhelperurl.phpconf mit der Variable zum Pi angelegt hast. Die Datei solte etwa so aussehen:

sensorandswitchhelperurl.phpconf
Code:
<?php
	$helperurlfb='http://fritz.box/sensorandswitch/sensorandswitchhelper.php';
	[COLOR="#FF0000"][B]$helperurlpi='http://IP oder Name des Pi/sensorandswitch/sensorandswitchhelper.php';[/B][/COLOR]
	$helperurlgeraet3='';
	$helperurlgeraet4='';
?>

pseudosmartphone.php
Code:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                 RaspberryPI   |
        |   ===============================================================   |
        |   Smartphone                                            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 "conf/sensorandswitchhelperurl.phpconf";
    
    include "include/includedateien.php";
    include "include/includefunctions.php";
    include "include/includeconf.php";
    include "include/includeconfig.php";
    include "include/includedefine.php";

    $geraet="IP-Adresse oder Gerätename"; # ändern
     $befehl='sudo ping -w 2 '.$geraet;
    $url=[COLOR="#FF0000"][B]$helperurlpi[/B][/COLOR]."?befehl=".encodiere($befehl,33455);
    $Status=web($url,$post);
    $on=substr($Status,strpos($Status,"transmitted,")+12)*1;
    if ($on!=0) {
        echo "S#1#";
    }
    else {
        echo "S#0#";
    }

    exit;
    
?>
Ohne sensorandswitchhelperurl.phpconf ist sonst die Variable nicht belegt und es kann nicht funktionieren.

Über den sashelpter werden die meisten PseudoGeräte gesteuert und es ist ratsam, diesen Weg zu benutzen, da in späteren Versionen von mir PseudoGeräte-Scripte für dieses Verfahren angeboten werden und du so auch aus den mitgelieferten Scripten viele nutzen kannst, was ohne eine funktionierende sashelper-Konfiguration nicht funktioniert.

@koyaanisqatsi: Danke für die schnelle und einfache Problemlösung. :)
 
@koyaanisqatsi:

Kannst du dich noch an deine istOnline-function erinnern. Ich wollte sie bei einem Script benutzen und treffe da auf eine Merkwürdigkeit. fsockopen() auf ein aktives Gerät mit aktiver IP angewandt läuft prima (Port verfügbar, Port nicht verfügbar, alles ok), aber wenn das Gerät ausgeschaltet ist, hängt das Script ewig lange und reagiert nicht mehr. Kannst du dir das erklären? Der timeout hilft da nicht, da er dafür nicht wirkt. :gruebel:
 
Eine schnelle Recherche hat das Zutage gebracht...
timeout bei fsockopen klappt nicht...
...und hier: stream_set_timeout
PHP:
<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo 'Connection timed out!';
    } else {
        echo $res;
    }

}
?>
...testen musst du das aber. ;)

Getestet hab ich das hier...
PHP:
<?PHP
function isServer($ip,$port) {
$timeout = 1;
set_time_limit($timeout);
$fp = @fsockopen($ip, $port, $timeout);
if($fp)
{
return true;
}
else
{
return false;
}
}
?>

Quelle

...übermässig lange muss ich nicht auf die SaS Aktualisierung warten.
Das kann aber auch an der Installation auf der Fritz!Box liegen.
 
Zuletzt bearbeitet:
Mit der 2. Lösung hängt er sich ewig lange auf. Bin jetzt auf ping gegangen mit 2 sek. Zeitbegrenzung, das passt. fsockopen beim Pi macht da wohl Probleme.

Trotzdem vielen Dank für deine Recherche. :)
 
Hallo,
Durch das Einrichten des SaS ist bei mir die Frage aufgekommen, ob es nicht auch möglich ist einen/mehrere "Schaltkalender" caldav aus der Owncloud einzubinden.

Für jedes Dect200 einen separaten Kalender, und mit dem entsprechenden Termin "Ein" wird die Dose eingeschaltet und mit dem Termin "Aus" wieder ausgeschaltet.

(Mir ist bekannt, dass es sowas direkt in der Fritzbox mit Google bereits gibt, aber nicht jeder findet Googel toll.)
 
Zuletzt bearbeitet:
Diese legst du dir mit den sasap-Schaltbedingungen selbst fest. Was du willst, gibt es also schon. Daher keine separate weitere Cloudlösung, da unsinnig. Schau dir einmal genau die Möglichkeiten der sensorandswitchautoproui.php an. Ich lasse damit bei mir alles automatisch schalten. Denke daran, dass dort alle Felder mit * als Platzhalter funktionieren.

Simples Dose1 15:00 jeden Tag an
oder Dose1 19:00 jeden Tag aus sind dort problemlos hinterlegbar.
Genauso wie immer Donnerstag schalten oder nach Sonnenauf- oder -untergang plus oder minus x Minuten. Das ist selbstverständlich für jede Schaltsteckdose individuell festlegbar. Das Ganze kann dann auch noch gemischt mit weiteren Bedingungsabfragen sein.

Mit Dose1 **:00 wird jede Stunde geschaltet
mit 01.**.**** jeden 1. des Monats usw. usw.

Schau es dir an, dann brauchst du eine zusätzliche (auch Own-)Cloud-Einbindung sowieso nicht mehr. ;)
Und wenn du das umgesetzt hast, kannst du dich an Schaltkettenglieder wagen, dann wirds erst richtig interessant. :)

PS: Den starren Fritzbox-Schaltkram benutze ich schon Ewigkeiten nicht mehr, weil das Meiste damit nicht umsetzbar war und ist.


Nachtrag: Wenn es dir nur um die Einbindung der CALDAV-Protokolle geht, diese werde ich nicht unterstützen, da sas eine zu hohe Schaltkomplexität aufweist, um dann auch noch an mehreren Stellen dann Schaltdaten zu pflegen. Das gibt dann nur Verwirrung, wenn Schaltdaten sich dann "beißen". Besser so etwas gleich in sasapui erfassen und pflegen und sonst nirgends. ;)
 
Zuletzt bearbeitet:
So sieht mein PI-Schalt- und Infocenter jetzt aus: :)
an:piallinone.png
aus:piallinoneoff.png
(Die DECT200 ausschalten übernimmt sasap, wenn der PI aus ist (shutdown), dann verbaucht er unter 0,7 Watt und dann knipst sasap automatisch den Strom aus.)
 
Zuletzt bearbeitet:
Hallo,
Wie misst Du den Verbrauch beim PI? Macht das ein DECT200? Oder holst Du die Infos auf dem PI selber?
 
Das kommt von der DECT200. Ebenso die Temp (FD200). Wird dann in der P##-Anzeige zusammengebastelt. Wenn der PI aus ist, wechselt die Anzeige komplett auf die DECT200-Werte.
Durch S##, T##, W## und P## in Kombination kann man so hübsche Spielereien basteln.
 
Nicht schlecht, wobei mein pi wegen anderer Dinge die drauf laufen nie aus ist.
 
:D
Durch S##, T##, W## und P## in Kombination kann man so hübsche Spielereien basteln.

Das hätte ich mir als "feature request" gar nicht getraut zu fragen.
Super, vielen vielen Dank!
 

Neueste Beiträge

Statistik des Forums

Themen
246,157
Beiträge
2,247,057
Mitglieder
373,676
Neuestes Mitglied
twegner74
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.