HTTP POST Request help needed

Hi! I try send notifications to LaMetric Time (I know about binding, but it did not provide icons in notifications)
Here is curl command:

curl -X POST -u "dev:xxxx" -H "Content-Type: application/json" -d " { \"model\": { \"frames\": [ { \"icon\":\"a2867\", \"text\":\"Hello\"} ] } }" http://192.168.1.80:8080/api/v2/device/notifications

I try and no luck:

executeCommandLine(Duration.ofSeconds(6), "/bin/sh", "-c", "'curl -X POST -u \"dev:xxxx\" -H \"Content-Type:application/json\" -d \"{\"model\":{\"frames\":[{\"icon\":\"a2867\",\"text\":\"Hello\"}]}}\" http://192.168.1.80:8080/api/v2/device/notifications'")

executeCommandLine(Duration.ofSeconds(6), ("curl -X POST -u 'dev:xxxxx' -H 'Content-Type:application/json' -d '{\"model\":{\"frames\":[{\"icon\":\"a2867\",\"text\":\"Hello\"}]}}' http://192.168.1.80:8080/api/v2/device/notifications").split(" "))

Read DOCs, and not found how to send -u parameter from curl in openHAB sendHttpPostRequest HTTP Actions

Why don‘t use sendHttpPostRequest?

I just checked my code and I don‘t use -u at all

Need to provide user and pass in request

-u "dev:xxxx"

I dont know how

sendHttpPostRequest(String url, String contentType, String content, Map<String, String> headers, int timeout)

Where to put -u?

You can try the code below - just change your ApiKey, ip-address and the json-data:

val String LaMetric_ApiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
val String LaMetric_Notification_Endpoint = "http://dev:" + LaMetric_ApiKey + "@192.168.100.50:8080/api/v2/device/notifications"
val String LaMetric_Notification_Headers = "application/json"
var String LaMetric_Data = "{your json here}"
var String API_RETURN = sendHttpPostRequest(LaMetric_Notification_Endpoint,LaMetric_Notification_Headers,LaMetric_Data,20000)

Yes! Thank you @Flip :grinning:

Is it working?

Yes

Well done :slight_smile: Maybe you can mark the code above as solution - just in case somebody else is having this problem

Did it already :slightly_smiling_face:

1 Like

I’m struggling using this “My Data (DIY)” App for the Lametric Time with OpenHAB 3.
Link to the documentation: My Data (DIY) App on LaMetric Market | LaMetric Time clock for smart home

I’m lost what " 1. Expose your data to some URL available in the same local network with the device in predefined JSON format (more about that below)." actually means.
How to achieve this? Do i need to use the HTTP binding for that?
What URL do i have to use? Help is really appreciated!

You need to create file /etc/openhab/html/lametric.json, adjust path according to File Locations.
Here is my rule:



val clear         = "R0lGODlhCAAIAJEDAPHeAOjIAPrxAP///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMi1jMDAwIDc5LjU2NmViYzViNCwgMjAyMi8wNS8wOS0wODoyNTo1NSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5N2YwZmUxOC0wZWM0LTg3NDktOTM2My1kNzMxODg1MjI2NTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkY0RDVEMTEwNjBEMTFFRDlBM0NBMDg3MDRDNzczQzIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkY0RDVEMTAwNjBEMTFFRDlBM0NBMDg3MDRDNzczQzIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjQgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDY4N2ViNDEtNzIzYy1mMzQ2LWI4ZDgtMzA0OTRlODgzY2E5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjk3ZjBmZTE4LTBlYzQtODc0OS05MzYzLWQ3MzE4ODUyMjY1MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUUAAMALAAAAAAIAAgAAAIT3GRhyzchhFInomUvgnKA1mhGAQAh+QQFFAADACwAAAAACAAIAAACCpwNpxc76aKcbBUAIfkEBRQAAwAsAAAAAAgACAAAAgrcYqkq6w9ZVMAUACH5BAUUAAMALAAAAAAGAAgAAAIK3GRhy+2sXkOmAAA7"
//other base64 icons

rule "LaMetriс"
when Time cron "*/15 * * * * ?" //run every 15 seconds
then
 
//some your code
iconBase64 = clear
textOutTemp = YOURTEMP.replaceAll(".0°","°")

    executeCommandLine(Duration.ofSeconds(6), "/bin/sh", "-c",
    "(echo '
    {
    \"frames\": [
        {
           
            \"text\": \"" + textOutTemp + "\",
            \"icon\": \"data:image/gif;base64," + iconBase64 + "\"
        }
    ]
	}
	' > /etc/openhab/html/lametric.json) >/dev/null 2>&1; echo $?")
end

I really appreciate writing a possible solution to my problem!
But sadly i didn’t get any point of the solution. :frowning:

What about the HTTP binding and the configuration of the thing? Do i need a Channel in this Thing?
How to fill the field of the “Basis-URL”?

I was expecting that i have to do something in the area of this:

rule "Update My Data DIY"
when
        Item PostHTTP received command ON
then
        val String URL = "http://192.168.178.91/jsonmydata"
        var String contenttype = "application/json"
        var String jsondata = '{"frames" : [ {"icon": "794","text": "Hello!"}]}'

        logInfo("Update My Data DIY", "Sending Command" + jsondata + "data end")

        sendHttpPostRequest(URL, contenttype, jsondata)
end