Amazon Dasbutton auf windows rechner

Hallo,

ich bin auf schon eine weile dran meine Dash buttons in IPS zu integrteieren leider ohne erfolg.

ich habe diese Anleitung gefunden.

Anleitung: Amazon Dash Button HACK einrichten Windows OHNE Python ifttt ⋆ CodeCaveMe Blog

leider klappt das nicht so, finde keine Geräte.

Hatt jemand eine lösung wie mann unkompliziert die dash buttons in IPS bekommt ?

Habe kein Raspi, mein IPS läuft auf einen win rechner.

Danke

Grüße

Hallo,

Ich habe es mit der Anleitung die ich oben gepostet habe hinbekommen.

Wenn ich nun den Dasbutton betätige kann ich in Windows ein Programm starten Z.b eine Verknüpfung mit einer URL zu IPS um das Licht einzuschalten.

Ich stehe nun vor einen Neuen Problem.

Einschalten oder Ausschalten geht aber dazu bräuchte ich 2 Dashbuttons. 1 für An und 1er für Aus.

Jetzt habe ich mit ein Toggelbutton gebaut.

Leider kann ich das Skript aber nicht über die URL Starten.

Dann habe ich es mit dieser Lösung versucht.

IPS_RunScript(12345 /[Gartenbeleuchtung An]/);

Leider auch ohne Erfolg.

Gibt es eine Lösung womit ich ein IPS Skript starten kann?

Vll. auch ein Programm oder über eine URL.

Gern stehe ich auch für Fragen bereit zwecks Inbetriebnahme auf einen Windows Rechner.

Grüße

Was machst Du denn genau wie rufst Du die URL auf? Der einfachste Weg ist sicher einen Webhook anlegen und dahin dann einen Request zu schicken dann schaltet das Skript was am Webhook hängt. Dazu müsstest Du aber näher beschreiben was jetzt eigentlich passiert wenn der Dashbutton gedrückt wird.

Hi Fonzo,

also bis jetzt passiert folgendes:

1 Button betätigen

2 ein X beliebiges Programm oder Verknüpfung wird gestartet.

Ich habe es ziemlich prakmatisch gemacht auf dem Desktop eine neue Verknüpfung angelegt und hier die Web URL eingetragen zu meinem Skript:

http://192.168.178.64:3777/user/WebhookBY.php?RUNScriptID=28849

Wenn ich dem Skript einen einfachen Befehl zu weise also

ENO_SwitchMode(59841 /[Untergeschoss\Wohn/Esszimmer\Licht Wohnzimmer]/, true)

dann geht es ohne Probleme.

Dann kann ich aber das Licht nicht mehr ausschalten, außer mit einem 2ten dash button.

Also war meine Überlegung ich lege ein Skript mit einem Toggel Button an.

Leider kann mann das Skript nicht über einen Webhook starten.

es kommt zwar die Rückmeldung Skript ausgeführt aber es geht nicht.
Nur wen ich es mit der Maus ( Rechtsklick Skript starten) mache.

Und da ist grad mein Problem.

Wie ich so ein Skript über einen Webhook zum laufen Bekomme:

Das Skript funktioniert soweit auch. Nur eben nicht über URL.

Das Skript:

/**********************************************************
*

  • Toggle-Button für Lampen
    1. Integer-Variable anlegen unterhalb des Devices (z.B. Lampe)
    1. Variablen-Profil anlegen (Integer mit Range 0-1, Schrittweite 1)
    1. Skript an Integer-Variable verknüpfen (Eigene Aktion)

**********************************************************/

// Variablen-ID der Integer-Variable aus 1.
$myIntValID = 23382 /[Obergeschoss\Büro\Licht Büro\Status\Button]/;
// Names des Variablen-Profils aus 2.
$myVariableProfile = „Button1“;
// ID eines Homematic-Devices, falls dies gleich geschalten werden soll
$myHomeMaticDevice = 17266 /[Obergeschoss\Büro\Licht Büro\Status]/;

IPS_RunScript(41451 /[Obergeschoss\Büro\Licht Büro\Status\Button\Toggel Button]/);
if($_IPS[‚SENDER‘] == „Execute“)
{
$value = IPS_GetVariableProfile($myVariableProfile);
switch($value[‚Associations‘][0][‚Value‘])
{
case 0:
toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice);
break;

    case 1:
    toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice);
    break;
}

}

if($_IPS[‚SENDER‘] == „WebFront“)
{
switch($_IPS[‚VALUE‘])
{
case 0:
toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice);
break;
case 1:
toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice);
break;
}
}

function toggleOn($myIntValID, $myVariableProfile, $myHomeMaticDevice)
{
// Delete VariableProfileAssociation
IPS_SetVariableProfileAssociation($myVariableProfile, 0, „“, „“, -1);
// Set new VariableProfileAssociation
IPS_SetVariableProfileAssociation($myVariableProfile, 1, " An ", „“, 0x00FF00);
// Switch Bulb
ENO_SwitchMode(57493 /[Obergeschoss\Büro\Licht Büro]/, true);
// Set Value Integer
SetValue($myIntValID , 1);
}

function toggleOff($myIntValID, $myVariableProfile, $myHomeMaticDevice)
{
// Delete VariableProfileAssociation
IPS_SetVariableProfileAssociation($myVariableProfile, 1, „“, „“, -1);
// Set new VariableProfileAssociation
IPS_SetVariableProfileAssociation($myVariableProfile, 0, " Aus ", „“, 0xFF0040);
// Switch Bulb
ENO_SwitchMode(57493 /[Obergeschoss\Büro\Licht Büro]/, false);
// Set Value Integer
SetValue($myIntValID , 0);
}

Kann es auch nicht, da Du denke ich das Skript über IPS_RunScript aufrufst, es aber darauf gar keine Bedingung in dem Skript gibt die greift, also wird auch nichts ausgeführt. Du hast nur Bedinungen für den Webfront und Execute (Ausführen aus der Verwaltungskonsole) hinterlegt.
Wenn Du die Bedingung abänderst, sollte das Skript dann auch richtig ausgeführt werden, wenn Du dies über ein anderes Skript startest.


if($_IPS['SENDER'] == "Execute" || $_IPS['SENDER'] == "RunScript")

Vereinfachend könnte man die Anforderungen an $_IPS[‚SENDER‘] auch entfernen und immer den ‚Execute‘-Teil ausführen. Das sollte dann auch immer zum gewünschten Ergebnis führen, egal von wo das Skript ausgeführt wird, und vereinfacht den Code noch ein bisschen.

Hallo,

hmm das scheint nicht zu funktionieren

sobald ich oben in mein Skrip

if($_IPS[‚SENDER‘] == „Execute“ || $_IPS[‚SENDER‘] == „RunScript“)

einfüge läuft das Skript die ganze zeit.

Also mein Licht geht ständig an / Aus /an /aus…

solange bis ich diese Zeile wieder entferne.

Gibt es noch eine andere Idee ? ^^

Danke

Was macht denn die RunScript Zeile eigentlich in Deinem Skript,das habe ich nicht verstanden? Womöglich rufst Du ja das Skript selber wieder auf, ich weis ja nicht wozu die Zeile gut ist bzw. was für ein Skript da zusätzlich ausgeführt werden soll, ansonsten löschen

Wahrscheinlich rufst du das Skript irgendwo per RunScript auf und wiederholst dies immer wieder. Da kannst du am besten mal gucken, indem du mit Rechtsklick auf Skript klickst und dann „Nach Referenzen suchen“ anklickst.

Ich würde das ganze auch unter Windows per WEBHOOK realisieren.
Falls du doch mal auf einen Raspberry umsteigst, musst du nichts anpassen…

Hier mal kurz wie das ausschaut:

Du rufst unter Windows die entsprechende WEBHOOK URL von IPS auf:

webhook.JPG

Hier die URL die das Raspi Python Skript aufruft… Unter Windows müsste dass sicherlich auch per IEXPLORER.EXE URL… funktionieren…

webhook_URL.JPG

In IPS kannst du das Schalten von an/aus wie folgt unterscheiden:

<?
	$id_variable = 19497 /*[Haus\OG\Amazon Dash Button\Playdoh\Licht an / aus]*/;
    $st_variable = GetValue($id_variable);
    $var_info = IPS_GetVariable($id_variable);
    $now = $newTime = strtotime('-10 seconds');
    
    if ($var_info['VariableUpdated'] < $now) {
        if ($st_variable == false) {
            SetValue($id_variable, true);
        } else {
            SetValue($id_variable, false );
        }
    }


?>

-> P.s. das Skript habe ich aus Zeitmangel noch nicht 100%ig getestet…
Eine Fehlschaltung wollte ich mit den 10 Sekunden vermeiden

Warum macht ihr das alles so kompliziert? Der Dashbutton sendet doch einfach einen Request. Es reicht doch aus wenn ich den in IP-Symcon entgegen nehme dazu braucht man weder externe Skripte noch Programme noch irgendwelche Webhooks.

Einfach in IP-Symcon einen Multicastsocket anlegen Sendeport ist 68 (den braucht man sowieso nicht, der Dashbutton bekommt einfach keine Antwort) und Empfangsport ist 67. Und schon bekommst Du über den Socket die Daten vom Dashbutton ohne Umweg über externe Programme oder Skripte.

Hallo,

danke ich werde mir das mal ansehen.

@ Fonzo leider kenne ich mich mit IPS nicht so gut aus und habe keine Anleitung gefunden wie ich einen Dash button ins IPS bekomme nur das mit dem Raspy aber das habe ich nicht.

Also habe ich mir eine Lösung gesucht.

Gerne würde ich den Button direkt in IPS einbinden nur weis ich nicht wie.

Habe mal ein Multicast angelegt.

Mit der IP des Buttons aber wie kann ich das nun Abgreifen?

im Meldungsfenster sehe ich auch kein Ereignis das ausgelöst wird wenn ich den button drücke.

Kannst du vielleicht kurz eine Anleitung schreiben?

Grüße

Danke

Mit ausführlicher Anleitung wird die Woche nichts da keine Zeit.

Also Multicast Socket (CTRL+1) unter I/O Instanzen anlegen

[ul]
[li] Sende-Host IP-Adresse von IP-Symcon
[/li][li] Sende-Port 68
[/li][li] Empf.-Host Hier ist die IP von IP-Symcon voreingestellt
[/li][li] Empf.-Port 67
[/li][li] Multicast 239.255.255.250
[/li][li] Aktiviere Broadcast aktiv
[/li][li] Aktiviere Reuse Address aktiv
[/li][li] Aktiviere Loopback aus
[/li][/ul]

Du solltest wie in den Anleitungen vorgesehen den Internetzugang des Dashbuttons im Router gesperrt haben. Wenn Du jetzt das Debug Fenster (grüner Käfer) des Multicast Sockets öffnest geht ein weiteres Fenster auf. Hier sollte nun wenn Du den Dashbutton drückst Daten sichtbar sein.

Daten weiterleiten kannst Du dann mit einer RegisterVariable

Es kommt drauf an wieviele Dashbuttons Du nutzten willst. Im simpelsten Fall das es nur ein Dashbutton ist musst Du noch nicht mal was auswerten, es interessiert Dich ja lediglich das der Dashnutton etwas gesendet hat.

Dazu legst Du eine Variable (CTRL+2) vom Typ Boolean mit dem Profil ~Switch an.

In das Skript das Du in der Registervariable angeben hast schreibst Du jetzt im einfachsten Fall rein


<?
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable") {
    
	
	$payload = $_IPS['VALUE'];

$state = GetValue(31584 /*[Geräte\Dashbutton\Dash Button Toggle]*/); // ID der Boolean Variable die verändert wird
if($state)
{
SetValue(31584 /*[Geräte\Dashbutton\Dash Button Toggle]*/, false);
}
else
{
SetValue(31584 /*[Geräte\Dashbutton\Dash Button Toggle]*/, true);
}

}

?>

Jedes mal wenn Du jetzt den Dashbutton drückst wechselt die Variable zwischen ein / aus. Auf die Variable kannst Du jetzt ein Ereignis legen das Dir dann dein eigentliches Gerät schaltet sobald sich die Variable verändert.

Solltest Du mehrere Dashbuttons besitzten dann musst Du noch die Daten ein bisschen auswerten damit Du weist welcher Dashbutton etwas gesendet hat.

z.B. so


<?
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($_IPS['SENDER'] == "RegisterVariable") {
    
	$payload = $_IPS['VALUE'];
	$search = array ('<NUL>', '<SOH>', '<ACK>', '<EOT>', '< EOT>');
$replace = array ('', '', '', '', '');
$messageraw = str_replace($search, $replace, $payload);
$messagestart = strpos($messageraw, '<ETX>');
$messageraw = substr($messageraw, $messagestart+5);
$messageend = strpos($messageraw, '<ETX>');
$message = substr($messageraw, 0, $messageend); // Identifikation des Dashbuttons
if($message == "5À¨72À¨7Z7ÿ") 
{
$varid = 12345;
toggle($varid);
}
elseif($message == "5ˬ71ˬ7Z7") 
{
$varid = 23456;
toggle($varid);
}
}

function toggle($varid)
{
$state = GetValue($varid);
if($state)
{
SetValue($varid, false);
}
else
{
SetValue($varid, true);
}
}
?>

WoW.

Vielen Dank.

Ich werde mir das mal ansehen und veruschen nach zu Bauen.

Danke für die mühe, ich berichte wenn ich es geschafft habe. :rolleyes:

Oder nicht weiterkomme :banghead:

Danke

Ich habe nur einen Dashbutton und den nie richtig genutzt. Wichtig ist das Du auf alle Fälle auf die MAC prüfst, auf dem Port kommen nämlich auch Anfragen über DHCP rein, wenn Du das nicht auf eine MAC einschränkst wird jedes mal etwas ausgelöst wenn per DHCP eine Anfrage gestellt wird. In sofern vergiss die Aussage oben Du must die MAC zwingend prüfen und dann nur schalten wenn die MAC auch mit der MAC des Dashbuttons übereinstimmt.

Hiermit sollte es auch nur mit IPS funktionieren.
GitHub - Nall-chan/IPSNetwork

MAC des Button Eintragen ( ohne oder mit Doppelpunkt bzw. ohne oder mit Bindestrichen)
IO Öffnen (keine Adresse nötig).

Button drücken.
Funktioniert auch perfekt als Handy betritt WLAN-Zone :slight_smile:

Wenn es nicht funktioniert, bitte Firewall Port 67 UDP ankommend freischalten.

Michael

Ich habe nun mal Dein Ansatz ausprobiert. Mulicast wird angelegt auf dem Multicast kommen im Debug auch Daten rein. Allerdings wird die Variable der DHCP Sniffer Instanz bei mir nicht gesetzt. Aufgefallen ist mir auch das mit jedem DHCP Sniffer ein Multicast angelegt wird. Würde da nicht ein einziger für alle Geräten reichen? Kommt ja sowieso bei dem Socket das Signal von allen Geräten an.

Habe ich gemacht, sowohl groß also auch Kleingeschrieben ohne Bindestriche, hat bei mir trotzdem kein Unterschied gemacht.

Daran kann es im Prinzip nicht liegen denn es kommen ja Daten am Socket an.

Das mit dem Socket ist leider so.
Einfach x Instanzen erzeugen und dann in der physikalischen Baumansicht dem gleichen IO zuordnen und die restlichen löschen.
Es kann durchaus sein das ich beim Protokoll nicht alles berücksichtigt habe.
Hast du Mal einen Debug vom Socket für mich?
Dann prüfe ich das morgen.
Michael

Im DHCP Sniffer steht im Debug


DATA 01 01 06 00 A2 6A 29 D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BE 63 BE 65 50 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 82 53 63 35 01 03 36 04 C0 A8 37 0A 32 04 C0 A8 37 5A 37 03 01 03 06 FF 
isDHCP true
isDHCPDiscover false