Display push notifications on your phone

By | March 9, 2020

This article shows how you can easily receive push notifications from your smartphone using the HoneyPi Android app and ThingSpeak. You can configure which ThingSpeak channels and fields you want to receive notifications for and under what conditions. This allows you to react quickly when you receive a notification that the hive’s weight is higher or lower than certain values, for example.

Note: To receive push notifications with the HoneyPi Android app, you need at least App version 1.1.

Set up push notifications

To get push notifications on your phone, the following steps are necessary:

Step 1: Log in with your ThingSpeak account: https://thingspeak.com/login

Step 2: Click Apps > ThingHTTP > New ThingHTTP. The following fields should be configured:

Neuen
Neuen “ThingHTTP” erstellen
  • Name: Enter any name
  • URL: https://honey-pi.de/backend/push.php
  • Method: POST
  • Content Type: application/x-www-form-urlencoded
  • Body: The request body, which must consist of the following three parts. The three parameter parts are linked with &-characters, as is usual for URLs:
    1. channel: Channel ID for which the notification is to be sent. The variable %channel_id% can also be used here, which automatically inserts the ID of the channel for which this ThingHTTP entry is used. For more information about the variables, see here.
    2. title: Title of your push notification on the smartphone. If only “title=” is specified, i.e. an empty title, then “HoneyPi” is used as the title.
    3. body: Text of your push notification on the smartphone, e.g. “channel=%%channel_id%%&title=Temperature low &body=In the hive with channel-ID %%channel_id%% it is too cold with %%trigger%% degrees celsius. Time stamp: %%datetime%%”.
      • Here variables were used again. For example, the triggering measured value (%%trigger%%), the channel ID (%%channel_id%%) or the time (%%datetime%%) can be given dynamically.

Finally save the ThingHTTP entry via the “Save ThingHTTP” button.

Step 3: Click Apps > React > New React. The following fields should be configured:

  • React Name: Enter any name
  • Condition Type: Numeric
  • Test Frequency: Check the measured values while writing or every 10, 30 or 60 minutes. It is better to select every 10, 30 or 60 minutes, as the push notifications also appear every minute on the smartphone at a measurement interval of one minute, for example.
  • Condition:
    • If channel: Select the desired channel for whose field the notification is to be sent.
    • field: Select the ThingSpeak field for which the notification should be sent.
    • Selection of the condition, e.g. is less than or equal to
    • Measured value from which the condition is to take effect
  • Action: Select ThingHTTP
    • then perform ThingHTTP: Selecting ThingHTTP created in step 2
  • Options: As a rule, “Run action each time condition is met” can be selected here if the notification is to be sent every time the measured value corresponds to the condition.

Finally save the React with the “Save React” button.

Neuen
Neuen “React” erstellen

Step 4: Enable notifications in the HoneyPi-Android app: Simply click on the Notifications icon and on the next page enable/disable the channels for which you want to receive notifications.

Benachrichtigungen öffnen
Benachrichtigungen öffnen
Benachrichtigungen konfigurieren
Benachrichtigungen konfigurieren

If everything is configured correctly, the push notifications on your phone should look like the picture below:

Benachrichtigung auf dem Smartphone
Benachrichtigung auf dem Smartphone

Reuse ThingHTTP

As described above you have to create a ThingHTTP and a React on your smartphone to get a notification. You have to create a React for each desired notification (= ThingSpeak-Field), because it has to be selected there.

But you can reuse a ThingHTTP for as many fields as you like, because the same ThingHTTP can be selected in as many reactions as you like. For example, you can create a ThingHTTP for too low a temperature and a ThingHTTP for too high a temperature. These two ThingHTTPs can now be used in several channels for temperature monitoring.

Translated 19.10.2019 by JK

32 thoughts on “Display push notifications on your phone

  1. Andre

    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?

    Reply
    1. Melissa Post author

      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

      Reply
      1. Andre

        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

        Reply
  2. Jochen

    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.

    Reply
    1. Melissa Post author

      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.

      Reply
      1. Jochen

        Ja, die Benachrichtigungen sind auch in den Android Systemeinstellungen für die HoneyPi App freigegeben.

        Reply
      2. Jochen

        Gerade nochmals alles nachkontrolliert. Jede erdenkliche Benachrichtung für die HoneyPi App in den Systemeinstellungen ist freigegeben.

        Reply
        1. Melissa Post author

          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%%

          Reply
          1. Jochen

            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

  3. Patrick

    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

    Reply
  4. Andre Morer

    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‘;

    Reply
    1. Melissa Post author

      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.

      Reply
      1. Andre

        Hallo Melissa, vielen Dank für den Hinweis, muss ich diesen neuen channel selbst erstellen? Ich finde dazu nirgendwo einen Hinweis.
        Lg Andre

        Reply
        1. Melissa Post author

          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.

          Reply
          1. Andre

            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

          2. Melissa Post author

            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

  5. Jan Eicker

    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).

    Reply
    1. Manfred

      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

      Reply
  6. Robert

    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

    Reply
    1. Patrick

      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

      Reply
  7. Alfred

    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

    Reply
  8. 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

    Reply
      1. Robert

        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

        Reply
        1. Javan

          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

          Reply
          1. Robert

            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

          2. Melissa Post author

            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 bei data(4) (5. Element) passieren, aber das Programm ist vorher schon abgestürzt.

            data ist eine Variable, die das Ergebnis der Funktion thingSpeakRead speichert, die eine Liste an Messdaten zurückgibt. Hier findest du die Doku: https://de.mathworks.com/help/thingspeak/thingspeakread.html

            Dein Aufruf data = thingSpeakRead(readChannelID,'Fields',readField,'NumMinutes',timespace); bedeutet dann, dass aus deinem Channel mit ID readChannelID aus dem Feld readField die Daten der letzen timespace (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

  9. Karl

    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

    Reply
    1. Melissa Post author

      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

      Reply
      1. Karl

        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

        Reply
  10. Florian

    Hi, ist diese Funktion nur in der App pro Version verfügbar?
    VG Florian

    Reply
    1. Melissa Post author

      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

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *