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

Print Friendly, PDF & Email

14 thoughts on “Display push notifications on your phone

  1. 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
  2. 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
  3. 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
  4. 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

  5. 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
  6. 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 *