In diesem Beitrag wird gezeigt, wie ihr ganz einfach mithilfe der HoneyPi-Android-App und ThingSpeak Push-Benachrichtigungen mit eurem Smartphone empfangen könnt. Ihr könnt selbst konfigurieren, für welche ThingSpeak-Channels und -Fields sowie unter welchen Bedingungen eine Benachrichtigung auf euer Smartphone gesendet werden soll. Dadurch könnt ihr schnell reagieren, wenn ihr beispielsweise eine Benachrichtigung bekommt, dass das Gewicht des Bienenstocks größer oder kleiner bestimmter Werte ist.
Hinweis: Um Push-Benachrichtigungen mit der HoneyPi-Android-App zu empfangen, benötigt ihr mindestens die App-Version 1.1.
Push-Benachrichtigungen einrichten
Damit du nun Push-Benachrichtigungen auf dein Smartphone bekommst, sind folgende Schritte notwendig:
Schritt 1: Melde dich mit deinem ThingSpeak-Konto an: https://thingspeak.com/login
Schritt 2: Klicke auf Apps > ThingHTTP > New ThingHTTP. Folgende Felder sollten konfiguriert werden:
- Name: Beliebigen Namen eingeben
- URL: https://honey-pi.de/backend/push.php
- Method: POST
- Content Type: application/x-www-form-urlencoded
- Body: Der Request-Body, der aus nachfolgenden drei Teilen bestehen muss. Die drei Parameterteile werden wie bei URLs üblich mit &-Zeichen verknüpft:
- channel: Channel-ID, für die die Benachrichtigung gesendet werden soll. Hier kann auch die Variable %channel_id% verwendet werden, die automatisch die ID des Channels einfügt, für den dieser ThingHTTP-Eintrag verwendet wird. Weitere Informationen zu den Variablen siehe hier.
- title: Titel eurer Push-Benachrichtigung auf dem Smartphone. Falls nur „title=“ angegeben wird, also einen leeren Titel, dann wird „HoneyPi“ als Titel verwendet.
- body: Text eurer Push-Benachrichtigung auf dem Smartphone, z. B. „channel=%%channel_id%%&title=Temperatur niedrig&body=Im Bienenstock mit Channel-ID %%channel_id%% ist es zu kalt mit %%trigger%% Grad Celsius. Zeitpunkt: %%datetime%%“.
- Hier wurden wieder Variablen verwendet. Beispielsweise kann dadurch der auslösende Messwert (%%trigger%%), die Channel-ID (%%channel_id%%) oder der Zeitpunkt (%%datetime%%) dynamisch mitgegeben werden.
Zum Schluss noch den ThingHTTP-Eintrag über den „Save ThingHTTP“ Button speichern.
Schritt 3: Klicke auf Apps > React> New React. Folgende Felder sollten konfiguriert werden:
- React Name: Beliebigen Namen eingeben
- Condition Type: Numeric
- Test Frequency: Die Messwerte beim Schreiben oder alle 10, 30 oder 60 Minuten prüfen. Hier lieber alle 10, 30 oder 60 Minuten wählen, da bei einem Messintervall von beispielsweise einer Minute auch die Push-Benachrichtigungen minütlich auf dem Smartphone erscheinen.
- Condition:
- If channel: Gewünschten Channel auswählen, für dessen Field die Benachrichtigung gesendet werden soll
- field: ThingSpeak-Field auswählen, für das die Benachrichtigung gesendet werden soll
- Auswahl der Bedingung, z. B. is less than or equal to (dt. ist kleiner oder gleich als)
- Messwert, ab dem die Bedingung greifen soll
- Action: ThingHTTP auswählen
- then perform ThingHTTP: In Schritt 2 erstellten ThingHTTP auswählen
- Options: In der Regel kann hier „Run action each time condition is met“ gewählt werden, wenn die Benachrichtigung jedes Mal gesendet werden soll, wenn der Messwert der Bedingung entspricht.
Zum Schluss noch den React über den „Save React“ Button speichern.
Schritt 4: Benachrichtigungen in der HoneyPi-Android-App aktivieren: Klicke einfach auf das Benachrichtigungen-Icon und aktiviere/deaktiviere auf der darauffolgenden Seite die Channels, für die Benachrichtigungen empfangen werden sollen.
Wenn alles richtig konfiguriert wurde, sollten die Push-Benachrichtigungen auf deinem Smartphone wie auf nachfolgendem Bild aussehen:
ThingHTTP wiederverwenden
Wie oben beschrieben müsst ihr für eine Benachrichtigung auf euer Smartphone ein ThingHTTP und ein React anlegen. Ein React müsst ihr für jede gewünschte Benachrichtigung (= ThingSpeak-Field) anlegen, da dieses dort ausgewählt werden muss.
Ein ThingHTTP könnt ihr jedoch für beliebig viele Fields wiederverwenden, da das gleiche ThingHTTP in beliebig vielen Reacts ausgewählt werden kann. So könnt ihr beispielsweise ein ThingHTTP für zu niedrige Temperatur und ein ThingHTTP für zu hohe Temperatur anlegen. Diese zwei ThingHTTPs könnt ihr nun in mehreren Channels für eine Temperaturüberwachung verwenden.
Hallo zusammen,
Meine 6 HoneyPi Waagen funktionieren seit 3 Jahren tadellos – jedoch: Ich habe es immer noch nicht geschafft, den Schwarmalarm einzurichten – trotz Hilfestellungen von Melissa. Wäre hier in der comunity jemand bereit, mir bei der Einrichtung zu helfen?
Hier noch ein paar Dinge, die du nochmal prüfen könntest:
– Die Benachrichtigungen sollten für die HoneyPi App in den Android-Systemeinstellungen zugelassen sein
– In der HoneyPi App muss für den jeweiligen Channel die Benachrichtigung aktiviert sein
– Überprüfe nochmal, dass dein ThingHTTP Eintrag wie in der Anleitung ausgefüllt ist:
– URL:
https://honey-pi.de/backend/push.php
– Method:
POST
– Content Type:
application/x-www-form-urlencoded
– Body: Muss Parameter channel, title und body im Text haben, die mit &-Zeichen aneinander gereiht sind z.B.
channel=%%channel_id%%&title=Temperatur niedrig&body=Im Bienenstock ist es zu kalt
– Überprüfe deinen React Eintrag, ob der richtige Channel, Field und ThingHTTP ausgewählt ist und ob die Condition stimmt z.B. Messwert unterschreitet einen bestimmten Schwellenwert. Außerdem ist wichtig, ob die Action einmalig oder bei jedem neuen Wert ausgeführt werden soll, was bei den Options deines Reacts eingestellt werden kann.
– Prüfe, ob auch Messwerte in das angegebene Field des Channels gesendet werden, die die Condition auslösen
Danke Melissa, deine Hilfe greift schon so weit. Aber meine Probleme sind ganz am Anfang in thingspeak. Hierbei sollte ich von einem comunity Mitglied Hilfestellung haben. Ich finde keine grundlegenden Hinweise, wie man beginnt.
lg Andre
Nachdem ich jetzt den HoneyPi stabil im Testbetrieb am laufen habe, möchte ich auch die Push-Benachrichtigungen ausprobieren. Allerdings kommt auf dem Smartphone nichts an. Berechtigungen in der App sind freigegeben, App ist die aktuellste Version und Pro ist am laufen.
Ist die Anleitung oben noch aktuell, oder funktioniert das inzwischen nicht mehr? Die IFTTT Variante funktioniert übrigens auch nicht mehr und sollte evtl. entfernt werden. Scheinbar hat IFTTT sehr viel geändert.
Hallo Jochen, hast du auch in den Systemeinstellungen bei der HoneyPi App die Berechtigung zur Benachrichtigung aktiviert? Das muss seit Android 13 zusätzlich gemacht werden. Diese findest du in den Einstellungen deines Smartphones > Benachrichtigungen und Statusleiste > HoneyPi App > aktivieren. Die Bezeichnungen können evtl. auf deinem Handy abweichen.
Ja, die Benachrichtigungen sind auch in den Android Systemeinstellungen für die HoneyPi App freigegeben.
Gerade nochmals alles nachkontrolliert. Jede erdenkliche Benachrichtung für die HoneyPi App in den Systemeinstellungen ist freigegeben.
Da die Benachrichtigung gerade in meinem Test funktioniert hat, kann ich nur noch vorschlagen, dass du auf ThingSpeak dein React und ThingHTTP Eintrag nochmal prüfst. Beim ThingHTTP ist vor allem als URL https://honey-pi.de/backend/push.php und der Body wichtig. Hier muss channel und body gesetzt sein. Es dürfen keine Leerzeichen zwischen den &-Zeichen sein. Versuche es am besten Mal zum Testen mit folgendem Body:
channel=%%channel_id%%&title=Test&body=Test Benachrichtigung für Channel %%channel_id%%
Ich habe es jetzt nochmals alles kontrolliert. Alles richtig eingetragen. Jetzt habe ich den React und ThingHTTP nochmals neu angelegt und jetzt scheint es zu funktionieren.
Vielen Dank
Hallo,
ich habe probleme mit dem Schwarm Alarm, der hat jetzt 2 Jahre supper funktioniert. Eigentlich sollte man doch manuel den ThingHTTP im browser auslösen können? Wenn ich das mache kommt die meldung
Fehler in den Parametern. Bitte überprüfe die Parameter..
Wo könnte hier das Problem sein?
Gruess Patrick
Vielen Dank für eure Mühe! Ich verstehe so Einiges nicht an dem Code, darf ich hier kurz nachfragen?
% ///////////////////////// Code ///////////////////////////////
%Schwarmalarm%
readChannelID = Hier kommt meine Channel ID rein, ist mir klar;
readAPIKey = ‚auch klar‘;
readField = auch klar;
writeChannelID = was kommt hier rein??;
writeField = das verstehe ich auch nicht;
writeAPIKey = ‚auch klar – ist wie „readAPIKey“ gegeben‘;
Hi Andre,
writeChannelID, writeField und writeAPIKey sind die Werte von einem weiteren Channel, in den die Ergebnisse der Berechnung mit der Funktion „thingSpeakWrite“ geschrieben werden. Du findest diese IDs/Keys ebenfalls in den Channel Einstellungen des ThingSpeak Channels.
Hallo Melissa, vielen Dank für den Hinweis, muss ich diesen neuen channel selbst erstellen? Ich finde dazu nirgendwo einen Hinweis.
Lg Andre
Hi Andre, ich vermute, du beziehst dich auf den Kommentar von Robert? Ich habe seinen Code leider nicht getestet, aber du musst den Channel auf jeden Fall anlegen. In seinem Code wird eine if-else-Bedingung (
L+SchwarmAlarmGewicht<=ZL
) gemacht und entweder 0 oder 1 in diesen neuen Channel geschrieben. Im ThingSpeak React kannst du dann den neuen Channel hinterlegen und bei 0 bzw. 1 die Benachrichtigung senden. Die Bedingung, bei der ein Schwarmalarm gesendet werden soll, kannst du ja dann nach Bedarf anpassen.Hallo Melissa!
Vielen Dank für deine Mühe! Langsam dämmerts, aber ich möchte doch noch nachfragen, wo es fundierte Anlaufstellen/ Hilfen/ Anleitungen/ Tutorials zu Thingspeak gibt. Diese Materie ist schwer zu finden. Neuen Channel anlegen ist ja klar, React habe ich unter Apps gefunden, aber wie das alles geht und funktioniert, …
Was mich wundert: Schwarmalarm ist sehr wichtig und man findet recht wenig Reaktionen der user.
lg Andre
Hallo Andre, zum Thema Schwarmalarm haben wir nur die Anleitung aus diesem Beitrag. Du kannst dir eine Benachrichtigung aufs Handy senden lassen, wenn der Messwert den angegebenen Schwellenwert unter-oder überschreitet. Der Code aus dem Kommentaren stammt nicht von mir und ich kann deshalb nicht beurteilen, ob er korrekt ist und funktioniert.
Für allgemeine Infos zu ThingSpeak, wirst du evtl. in deren Help Center fündig: https://de.mathworks.com/help/thingspeak/getting-started-with-thingspeak.html
Bei Fragen, kannst du dich auch ans ThingSpeak Forum wenden: https://de.mathworks.com/matlabcentral/topics/thingspeak.html
Liebe Melissa, lieber Robert,
ich habe mich nun auch mal an den Zeit- und gewichtsabhängigen Schwarmalarm gewagt. Ich habe dabei sowohl Roberts Code vom 11.Mai 2021 mit fixen Werten (x kg Differenz zwischen der aktuellen und der Vorletzten Messung), als auch den mit prozentualer Gewichtung (-20% Gewicht in den letzten 20 Minuten) erstellt und werde mal schauen, wie die sich verhalten. An dieser Stelle schonmal großen Dank!
Warum gibt es den Hinweis, dass man nicht weniger als 20 Minuten als zu untersuchende Zeitspanne eingeben soll. Hat das technische Gründe? Weil für einen Schwarmalarm hätte ich gerne einen möglichst kleinen Bereich, eher so 1% Gewichtsverlust in der letzten 1 Minute.
In dem Zusammenhang auch die Frage nach dem Sinn des TimeControll. In anderen Triggerwarnungen (Temperatur/Gewicht etc.) hatte ich bisher keine TimeControll. Der soll mich halt jedes mal warnen, wenn bestimmte Werte erreicht werden, hier die Values 1 oder 0.
Jetzt, wo ich beide Varianten laufen habe, und es so langsam verstehe merke ich auch, dass wohl eine Mischung aus beiden Ansätze geschickt wäre. Fester Wert für den Verlust (z.B. 300 Gramm) in der letzten Minute. so habe ich unabhängig von der Anzahl an Honigräumen o.ä. immer das tatsächliche Gewicht eines Schwarms als Trigger und statt „NumLastMeasuredValues = 2“ lieber einen Zeitraum (auch auf die Gefahr hin, dass sich in dieser Zeit die Werte nicht geändert hatten – ich glaube das ist unproblematisch).
Hallo Jan,
bin gerade über dein Schwarmalarm Posting gestolpert. Hast du bereits Erfahrungen aus deinen Ideen? Hast du mitunter einen Code zum testen?
Danke!
lg
Manfred
Schwarmalarm aus Vergleich akt. Wert zum vorletzten Messwert .
Mit der Hilfestellung von Melissa habe ich nun den Alarm hingekriegt.
Vielen Dank
Gruss
Robert
% ///////////////////////// Code ///////////////////////////////
%Schwarmalarm%
readChannelID = 1097XXX;
readAPIKey = ‚7OFQP64TGB09WXXX‘;
readField = 4;
writeChannelID = 1376XXX;
writeField = 8;
writeAPIKey = ‚7YFC6X1XNV704XXX‘;
NumLastMeasuredValues = 2;
SchwarmAlarmGewicht = 1.5
% Letzte Messung = L
% 2.letzte Messung = ZL
% Schwarmgewicht = (ZL – L)
%% Read Data %%
data = thingSpeakRead(readChannelID,’Fields‘,readField,’NumPoints‘,NumLastMeasuredValues);
L = data(2)
ZL = data (1)
Schwarmgewicht = ZL -L
if L+SchwarmAlarmGewicht<=ZL
thingSpeakWrite(writeChannelID,'Fields',writeField,'Values',[1],'WriteKey',writeAPIKey);
else
thingSpeakWrite(writeChannelID,'Fields',writeField,'Values',[0],'WriteKey',writeAPIKey);
end
Hallo Robert
ich habe deinen code kopiert und all meine daten eingetragen.
ich kriege aber immer diese fehlermeldung
SchwarmAlarmGewicht =
1.5000
Error using Volk 9
‚Fields‘ value must be a scalar or a 1-by-n numeric vector of positive integers with values between 1 and 8.
habe bei readField = 6; und writeField = 6; diese werte geschrieben.
worin könnte der fehler bestehen?
gruess patrick
Hallo Javan,
Danke für deine rasche Antwort und deinen link.
Ich werde mir das anschauen bzw. versuchen es umzusetzen, bin leider im dieser Art der Programmierung nicht so zu Hause.
Übrigens ich find euer honeypi Projekt super !
Schöne Grüße
Alfred
Hallo Melissa,
Ist es möglich einen Schwarmalarm nicht mit einem fixen Grenzwert, sondern mit einen Vergleich akt. Wert zum vorletzten Messwert auszuführen ?
Dies würde meiner Meinung nach ein ständiges Anpassen des Grenzwertes ersparen.
LG
Alfred
Hallo Alfred,
das geht aber ist etwas komplizierter umzusetzen. Bei ThingSpeak kann man out of the box absolute Werte für die Benachrichtung einstellen. Es geht aber auch sowas wie 10% Gewichtsabweichung.
Wir hatten hier diese veraltete Anleitung bereitgestellt: https://docs.google.com/document/d/1NUo_w4SJPpncgfs40p4jhjbCXaTYxnRLSRjjhcUEFPA/edit?usp=sharing Kannst du diese nutzen und gegebenenfalls für uns anpassen?
Vielen Dank und Grüße
Javan
Hallo Javan
ich habe nach dieser Anleitung https://docs.google.com/document/d/1NUo_w4SJPpncgfs40p4jhjbCXaTYxnRLSRjjhcUEFPA/edit?usp=sharing
versucht einen Schwarmalarm hinzukriegen. Channel ID,und Read API Key und Write API Key sind ok.
Aber es erscheint immer dieser Fehler:
„Index exceeds the number of array elements (1).
Error in Gewicht Schwarmalarm Mattlischwand (line 11)
if data(1)*0.8>data(3)“
Ich wäre froh um Hilfe
Vielen Dank und freundliche Grüsse
Robert
Hallo Robert,
die Fehlermeldung sagt aus, dass das field3, welches zu in data(3) aufrufst nicht existiert.
Die Zeile musst du anpassen, je nachdem in welchem Feld (field1, field2…) du das Gewicht abgespeichert hast.
Viele Grüße
Hallo Javan
Vielen dank für die rasche Antwort.
Den Fehler :
„Index exceeds the number of array elements (1).
Error in Gewicht Schwarmalarm Mattlischwand (line 12) “
bringe ich nicht weg.
Leider checke ich Funktion anscheinend nicht.
Meine Interpretation:
Ich lese Field 4 (data(4)) , schreibe in Field 8 eine eins wenn data(1)*0.8>data(4) sonst eine null.
Was, oder woher ist data(1) ?
Hier ist der ganze Code:
readChannelID = 1097XXX;
readAPIKey = ‚7OFQP64TGB09XXXX‘;
readField = 4;
writeChannelID = 1376XXX;
writeField = 8;
writeAPIKey = ‚7YFC6X1XNV70XXXX‘;
timespace = 20;
%% Read Data %%
data = thingSpeakRead(readChannelID,’Fields‘,readField,’NumMinutes‘,timespace);
if data(1)*0.8>data(4)
thingSpeakWrite(writeChannelID,’Fields‘,writeField,’Values‘,[4],’WriteKey‘,writeAPIKey);
else
thingSpeakWrite(writeChannelID,’Fields‘,writeField,’Values‘,[0],’WriteKey‘,writeAPIKey);
end
Bitte um Hilfe
Vielen Dank und Gruss
Robert
Hallo Robert,
dein data Array (Liste an Messwerten) scheint leer zu sein und deshalb kommt ein Fehler beim Zugriff auf
data(1)
, was bedeutet, dass auf das 2. Element (in der Informatik wird immer mit null angefangen zu zählen) nicht zugriffen werden kann, da es nicht existiert. Das gleiche würde auch beidata(4)
(5. Element) passieren, aber das Programm ist vorher schon abgestürzt.data
ist eine Variable, die das Ergebnis der FunktionthingSpeakRead
speichert, die eine Liste an Messdaten zurückgibt. Hier findest du die Doku: https://de.mathworks.com/help/thingspeak/thingspeakread.htmlDein Aufruf
data = thingSpeakRead(readChannelID,'Fields',readField,'NumMinutes',timespace);
bedeutet dann, dass aus deinem Channel mit IDreadChannelID
aus dem FeldreadField
die Daten der letzentimespace
(20) Minuten ausgelesen werden. Ich vermute einfach, dass du in den letzen 20 Minuten keine Daten gesendet hast und deshalb der data Array leer ist und deshalb der Fehler kommt.Vielleicht kannst du dein Programm so umschreiben, dass es nicht die Daten der letzen 20 Minuten, sondern die zuletzt gesendeten x Messdaten nimmt. Laut der oben verlinkten Doku sollte das mit dem Input Argument
NumPoints
gehen.Edit: Ich habe dir deine Keys und IDs ein bisschen zensiert, damit diese nicht offen im Internet zu lesen sind 😉
Gruß
Melissa
Hallo Melissa,
vorab soviel: ich habe eine Bienenstockwaage gebaut (HoneyPi-Projekt), ein ThingSpeak-Konto eingerichtet, wo ich 5 Sensoren abfrage: Gewicht, Außentemperatur, -Luftfeuchtigkeit, Temperatur Brutraum + Batteriespannung.
Dann habe ich nach Ihrem Beispiel bei „meinem“ ThingSpeak“ eine Testabfrage „Aupßentemperatur zu hoch“ erstellt und extra HoneyPi PRO abboniert. Es funktioniert alles bis auf den letzten Schritt gemäß Ihrer Dokumentation: BENACHRICHTIGUNG AUF DEM SMARTPHONE, d.h. dieses Bild kann ich bei mir nicht sehen.
Auf meinem Handy (Huawei nova 5T) ist in der schmalen Statusleiste das HoneyPi-Symbol. Ziehe ich dann die Statusleiste nach unten, kann ich folgendes sehen:
————————————————————–
HoneyPi 16:00
Außentemperatur
in H… Bienenstock mit Channel-Id 1234567…
——————————————————————–
Aber in meinem „Body“ steht ja noch weiterer Text/Infos, die nicht angezeigt werden.
Wie bekomme ich die Push-Benachrichtigung korrekt + zeitnah angezeigt?
Können Sie mir einen Tipp geben? Vielen Dank.
Mit freundlichem Gruß
Karl
Hallo Karl,
Android zeigt die Benachrichtigungen immer eingeklappt an, deshalb siehst du nur einen Teil deiner Nachricht. Normalerweise sollte bei der Benachrichtigung ein kleines „Pfeil/Dach nach unten“ Icon sein, mit dem man aufklappen kann und den vollen Text anzeigen kann. Das habe ich auch für den Screenshot von oben gemacht. Falls dein Handy dieses Icon jedoch nicht anzeigt, musst du deine Benachrichtigung in ThingSpeak auf die Zeichen, die du in deiner Benachrichtigung zur Verfügung hast, kürzen. Z.B. würde ja reichen: 1234567 = 8,14 °C; ZEITSTEMPEL
Gruß Melissa
Hallo Melissa,
vielen Dank für Deine prompte Antwort. Nachdem ich diese gelesen hatte, wurde mir klar, dass ich Deinen Screenshot bisher falsch interpretiert habe. Ich war bisher davon ausgegangen, dass die Nachricht von HoneyPi soooo aussehen muss.
Nach einem erneuten Test ist es auch so wie von Dir beschrieben.
Vielen Dank nochmals für Deine Mühe.
Gruß Karl
Hi, ist diese Funktion nur in der App pro Version verfügbar?
VG Florian
Hi, ja die Benachrichtigungen sind nur in der Pro Version verfügbar.
Über IFTTT (auch eine Anleitung hier verfügbar) oder die iOS-WebApp geht es aber auch ohne die Pro-Variante.
Gruß
Melissa