diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java index d450435bb9fc77135d100640b934ffcef29e0408..7a361a40b6959ca8490ad55874d0c85a96874a85 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java @@ -17,7 +17,7 @@ public class PsnBrokerBlock extends TranslatorBlock { String serialName = "sSerial"; //String pubSubName = ""; - String pubSubType = "didacticPSNetBroker"; + String pubSubType = "DidacticPSNetBroker"; //Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText() String pubSubName = label.trim(); diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java index 62afc2b586e2623291fee45f0a35e875b038e9dd..68b708ac41c6ac2ce23aeb97edd8d47280100a36 100644 --- a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java +++ b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java @@ -18,7 +18,7 @@ public class PsnClientBlock extends TranslatorBlock String serialName = "sSerial"; //String pubSubName = ""; String callbackName = ""; - String pubSubType = "didacticPSNetClient"; + String pubSubType = "DidacticPSNetClient"; //Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText() String pubSubName = label.trim(); diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..cbdebbf4d9cc40d32fb153b5a0c45faaa702f0e0 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java @@ -0,0 +1,46 @@ +package com.ardublock.translator.block.communication; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.StringBlock; + + +public class PsnPublishOnChangeBlock extends TranslatorBlock +{ + public PsnPublishOnChangeBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + + //Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText() + //TODO: add OnChange to autolabel + String name = label.trim(); + if(name.contains(" ")) { + name = name.substring(0, name.indexOf(" ")); + } + //TranslatorBlock tb_name = getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_data = getRequiredTranslatorBlockAtSocket(1); + TranslatorBlock tb_threshold = getRequiredTranslatorBlockAtSocket(2); + + //String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", ""); + String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + String data = tb_data.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + //TODO: test f check for VarBlock is needed + if(!(tb_topic instanceof StringBlock)) { + topic = topic.replaceAll("\"", ""); + } + if(!(tb_data instanceof StringBlock)) { + data = data.replaceAll("\"", ""); + } + + return name + ".publishOnChange("+topic+", "+data+", "+tb_threshold+");"; + } +} diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..75c772e64612384e2bc5334bd33706cfc9e61d61 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java @@ -0,0 +1,45 @@ +package com.ardublock.translator.block.communication; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.StringBlock; + + +public class PsnPublishOnChangeBoolBlock extends TranslatorBlock +{ + public PsnPublishOnChangeBoolBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + + //Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText() + //TODO: add OnChange to autolabel + String name = label.trim(); + if(name.contains(" ")) { + name = name.substring(0, name.indexOf(" ")); + } + //TranslatorBlock tb_name = getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_data = getRequiredTranslatorBlockAtSocket(1); + + //String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", ""); + String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + String data = tb_data.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + //TODO: test f check for VarBlock is needed + if(!(tb_topic instanceof StringBlock)) { + topic = topic.replaceAll("\"", ""); + } + if(!(tb_data instanceof StringBlock)) { + data = data.replaceAll("\"", ""); + } + + return name + ".publishOnChange("+topic+", "+data+");"; + } +} diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index 6010e18bfba12065516df8b45faedb08906be80e..e76eb6b35bcd6191734ff5f959b6da8ee35891bd 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -678,11 +678,16 @@ bc.number_chars=number of characters #COMMUNICATION #**************************** bd.communication=Communication +bd.didacticnetwork = Didactic Network bg.communicationDivider1=| serial | bg.communicationDivider2=| software serial | bg.communicationDivider3=| serial connectors | + bg.communicationDivider4=| PubSub Network | +bg.communicationDivider5=| PubSub publish | +bg.communicationDivider6=| PubSub subscribe | +bg.communicationDivider7=| PubSub callback | bg.glue_poly=connect bg.glue_msg=connect @@ -716,6 +721,10 @@ bg.psn_callback=psnClientCallback bg.psn_handle_network=PubSub handleNetwork bg.psn_data_to_send=PubSub isDataToSend? bg.psn_publish=PubSub publish +bg.psn_publish=psnName publish +bg.psn_publish_analog=psnName publish +bg.psn_publish_onchange=psnName publishOnChange +bg.psn_publish_onchange_bool=psnName publishOnChange bg.psn_subscribe=PubSub subscribe bg.psn_unsubscribe=PubSub unsubscribe @@ -751,7 +760,11 @@ bg.psn_client.description=PubSub Client bg.psn_callback.description=PubSub_Callback bg.psn_handle_network.description=PubSub handleNetwork bg.psn_data_to_send.description=PubSub isDataToSend? -bg.psn_publish.description=PubSub publish +bg.psn_publish.description=publish Char-Array +bg.psn_publish_analog.description=publish int-Data +bg.psn_publish_digital.description=publish boolean-Data +bg.psn_publish_onchange.description=publish value on change (depending on threshold) +bg.psn_publish_onchange_bool.description=publish boolean state on change bg.psn_subscribe.description=PubSub subscribe bg.psn_unsubscribe.description=PubSub unsubscribe @@ -775,6 +788,7 @@ bc.recFrame=received Frame bc.recChars=received characters bc.payload=payload bc.payloadLength=payload length +bc.threshold=threshold bc.topic=topic bc.topicLength=topic length bc.command=command type diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index 3025d584aafcb67379459daee246e62d5eba2d5c..5acbac8b154ab751d6c2ed75503e6d481c5607fe 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -2058,6 +2058,10 @@ <BlockGenus name="communicationDivider2" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider2" color="150 150 150" /> <BlockGenus name="communicationDivider3" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider3" color="150 150 150" /> <BlockGenus name="communicationDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider4" color="150 150 150" /> + <BlockGenus name="communicationDivider5" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider5" color="150 150 150" /> + <BlockGenus name="communicationDivider6" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider6" color="150 150 150" /> + <BlockGenus name="communicationDivider7" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider7" color="150 150 150" /> + <BlockGenus name="serial_read" kind="data" color="165 42 42" initlabel="bg.serial_read"> <BlockConnectors> @@ -2427,6 +2431,49 @@ </BlockConnector> </BlockConnectors> </BlockGenus> + <BlockGenus name="psn_publish_analog" kind="command" color="165 42 42" initlabel="bg.psn_publish" editable-label="yes"> + <BlockConnectors> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> + <DefaultArg genus-name="string" label="publishTopic" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.payload"> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="psn_publish_digital" kind="command" color="165 42 42" initlabel="bg.psn_publish" editable-label="yes"> + <BlockConnectors> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> + <DefaultArg genus-name="string" label="publishTopic" /> + </BlockConnector> + <BlockConnector connector-type="boolean" connector-kind="socket" label="bc.payload"> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <!-- TODO: add publishOnChange to autoname fcn--> + <BlockGenus name="psn_publish_onchange_bool" kind="command" color="165 42 42" initlabel="bg.psn_publish_onchange" editable-label="yes"> + <BlockConnectors> + <!--<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> + <DefaultArg genus-name="string" label="psnName" /> + </BlockConnector>--> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> + <DefaultArg genus-name="string" label="publishTopic" /> + </BlockConnector> + <BlockConnector connector-type="boolean" connector-kind="socket" label="bc.payload"> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="psn_publish_onchange" kind="command" color="165 42 42" initlabel="bg.psn_publish_onchange" editable-label="yes"> + <BlockConnectors> + <!--<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name"> + <DefaultArg genus-name="string" label="psnName" /> + </BlockConnector>--> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.topic"> + <DefaultArg genus-name="string" label="publishTopic" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.payload"></BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.threshold"></BlockConnector> + </BlockConnectors> + </BlockGenus> <!-- ******************** Storage *************** --> @@ -3215,15 +3262,20 @@ <BlockGenusMember>glue_char</BlockGenusMember> <BlockGenusMember>glue_string</BlockGenusMember> + <!-- <BlockGenusMember>communicationDivider4</BlockGenusMember> <BlockGenusMember>psn_broker</BlockGenusMember> <BlockGenusMember>psn_client</BlockGenusMember> <BlockGenusMember>psn_handle_network</BlockGenusMember> <BlockGenusMember>psn_publish</BlockGenusMember> + <BlockGenusMember>psn_publish_analog</BlockGenusMember> + <BlockGenusMember>psn_publish_digital</BlockGenusMember> + <BlockGenusMember>psn_publish_onchange</BlockGenusMember> + <BlockGenusMember>psn_publish_onchange_bool</BlockGenusMember> <BlockGenusMember>psn_data_to_send</BlockGenusMember> <BlockGenusMember>psn_subscribe</BlockGenusMember> <BlockGenusMember>psn_unsubscribe</BlockGenusMember> - <BlockGenusMember>psn_callback</BlockGenusMember> + <BlockGenusMember>psn_callback</BlockGenusMember>--> <!--<BlockGenusMember>tele_set_frame</BlockGenusMember> <BlockGenusMember>tele_read_frame</BlockGenusMember> @@ -3242,6 +3294,28 @@ <BlockGenusMember>glue_string</BlockGenusMember> </BlockDrawer> + <BlockDrawer button-color="165 42 42" name="bd.didacticnetwork" type="custom"> + <BlockGenusMember>communicationDivider4</BlockGenusMember> + <BlockGenusMember>psn_broker</BlockGenusMember> + <BlockGenusMember>psn_client</BlockGenusMember> + <BlockGenusMember>psn_handle_network</BlockGenusMember> + <BlockGenusMember>psn_data_to_send</BlockGenusMember> + + <BlockGenusMember>communicationDivider5</BlockGenusMember> + <BlockGenusMember>psn_publish</BlockGenusMember> + <BlockGenusMember>psn_publish_analog</BlockGenusMember> + <BlockGenusMember>psn_publish_digital</BlockGenusMember> + <BlockGenusMember>psn_publish_onchange</BlockGenusMember> + <BlockGenusMember>psn_publish_onchange_bool</BlockGenusMember> + + <BlockGenusMember>communicationDivider6</BlockGenusMember> + <BlockGenusMember>psn_subscribe</BlockGenusMember> + <BlockGenusMember>psn_unsubscribe</BlockGenusMember> + + <BlockGenusMember>communicationDivider7</BlockGenusMember> + <BlockGenusMember>psn_callback</BlockGenusMember> + </BlockDrawer> + <BlockDrawer button-color="0 32 96" name="bd.storage" type="custom"> <BlockGenusMember>storageDivider1</BlockGenusMember> <BlockGenusMember>eeprom_read</BlockGenusMember> diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index 9147bfeeb250f0483e6071ee37f5ba774e910b3f..0d284ea5202049546e97f9c7811f9276fa8d7022 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -675,11 +675,15 @@ bc.number_chars=Anzahl Zeichen #COMMUNICATION #**************************** bd.communication=Kommunikation +bd.didacticnetwork = Didaktik Netzwerk bg.communicationDivider1=| Seriell | bg.communicationDivider2=| Software Seriell | bg.communicationDivider3=| Verbinder | bg.communicationDivider4=| PubSub Netzwerk | +bg.communicationDivider5=| PubSub publish | +bg.communicationDivider6=| PubSub subscribe | +bg.communicationDivider7=| PubSub callback | bg.glue_poly=verbinde bg.glue_msg=verbinde @@ -713,6 +717,10 @@ bg.psn_callback=psnClientCallback bg.psn_handle_network=psnName handleNetwork bg.psn_data_to_send=psnName isDataToSend? bg.psn_publish=psnName publish +bg.psn_publish_analog=psnName publish +bg.psn_publish_digital=psnName publish +bg.psn_publish_onchange=psnName publishOnChange +bg.psn_publish_onchange_bool=psnName publishOnChange bg.psn_subscribe=psnName subscribe bg.psn_unsubscribe=psnName unsubscribe @@ -747,7 +755,11 @@ bg.psn_client.description=Client fuer PubSub Netzwerk erzeugen bg.psn_callback.description=Funktion wird automatisch aufgefufen wenn neue Daten empfangen werden bg.psn_handle_network.description=Empfaengt Daten, ueberprueft ob gesendet werden kann und versendet Daten bg.psn_data_to_send.description=Gibt zurück ob Daten zum Versenden bereit sind -bg.psn_publish.description=Daten zu Topic veroeffentlichen +bg.psn_publish.description=Zeichenkette (char[]) zu Topic veroeffentlichen +bg.psn_publish_analog.description=Analoge (int) Daten zu Topic veroeffentlichen +bg.psn_publish_digital.description=Digitale (bool) Daten zu Topic veroeffentlichen +bg.psn_publish_onchange.description=Analoge (int) Daten bei Wertänderung zu Topic veroeffentlichen +bg.psn_publish_onchange_bool.description=Digitale (bool) Daten bei Änderung zu Topic veroeffentlichen bg.psn_subscribe.description=Topic abonnieren bg.psn_unsubscribe.description=Topic nicht mehr abonnieren @@ -771,6 +783,7 @@ bc.recBuffer=Empfangspuffer bc.recChars=Anz. empfangene Zeichen bc.payload=Nutzdaten bc.payloadLength=Länge Nutzdaten +bc.threshold=Schwellwert bc.topic=Topic bc.topicLength=Länge Topic bc.command=Befehlsart diff --git a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties index a867dd0abc0030f5dc3e0d16a9c53c916ce7bc5a..4dbf20034b081e11bef3a4619dfcece14050abdf 100644 --- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties +++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties @@ -675,11 +675,16 @@ bc.number_chars=Anzahl Zeichen #COMMUNICATION #**************************** bd.communication=Kommunikation +bd.didacticnetwork = Didaktik Netzwerk bg.communicationDivider1=| Seriell | bg.communicationDivider2=| Software Seriell | bg.communicationDivider3=| Verbinder | + bg.communicationDivider4=| PubSub Netzwerk | +bg.communicationDivider5=| PubSub publish | +bg.communicationDivider6=| PubSub subscribe | +bg.communicationDivider7=| PubSub callback | bg.glue_poly=verbinde bg.glue_msg=verbinde @@ -713,6 +718,10 @@ bg.psn_callback=psnClientCallback bg.psn_handle_network=psnName handleNetwork bg.psn_data_to_send=psnName isDataToSend? bg.psn_publish=psnName publish +bg.psn_publish_analog=psnName publish +bg.psn_publish_digital=psnName publish +bg.psn_publish_onchange=psnName publishOnChange +bg.psn_publish_onchange_bool=psnName publishOnChange bg.psn_subscribe=psnName subscribe bg.psn_unsubscribe=psnName unsubscribe @@ -747,7 +756,11 @@ bg.psn_client.description=Client fuer PubSub Netzwerk erzeugen bg.psn_callback.description=Funktion wird automatisch aufgefufen wenn neue Daten empfangen werden bg.psn_handle_network.description=Empfaengt Daten, ueberprueft ob gesendet werden kann und versendet Daten bg.psn_data_to_send.description=Gibt zurück ob Daten zum Versenden bereit sind -bg.psn_publish.description=Daten zu Topic veroeffentlichen +bg.psn_publish.description=Zeichenkette (char[]) zu Topic veroeffentlichen +bg.psn_publish_analog.description=Analoge (int) Daten zu Topic veroeffentlichen +bg.psn_publish_digital.description=Digitale (bool) Daten zu Topic veroeffentlichen +bg.psn_publish_onchange.description=Analoge (int) Daten bei Wertänderung zu Topic veroeffentlichen +bg.psn_publish_onchange_bool.description=Digitale (bool) Daten bei Änderung zu Topic veroeffentlichen bg.psn_subscribe.description=Topic abonnieren bg.psn_unsubscribe.description=Topic nicht mehr abonnieren @@ -771,6 +784,7 @@ bc.recBuffer=Empfangspuffer bc.recChars=Anz. empfangene Zeichen bc.payload=Nutzdaten bc.payloadLength=Länge Nutzdaten +bc.threshold=Schwellwert bc.topic=Topic bc.topicLength=Länge Topic bc.command=Befehlsart diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties index a34b5b1e6466cf7a92c9ab4ee06628bffc5b3e56..381d417e77576251fb2cdcdf9dba70bce3076029 100644 --- a/src/main/resources/com/ardublock/block/block-mapping.properties +++ b/src/main/resources/com/ardublock/block/block-mapping.properties @@ -254,6 +254,10 @@ psn_callback=com.ardublock.translator.block.communication.PsnCallbackBlock psn_handle_network=com.ardublock.translator.block.communication.PsnHandleNetBlock psn_data_to_send=com.ardublock.translator.block.communication.PsnDataToSendBlock psn_publish=com.ardublock.translator.block.communication.PsnPublishBlock +psn_publish_analog=com.ardublock.translator.block.communication.PsnPublishBlock +psn_publish_digital=com.ardublock.translator.block.communication.PsnPublishBlock +psn_publish_onchange=com.ardublock.translator.block.communication.PsnPublishOnChangeBlock +psn_publish_onchange_bool=com.ardublock.translator.block.communication.PsnPublishOnChangeBoolBlock psn_subscribe=com.ardublock.translator.block.communication.PsnSubscribeBlock psn_unsubscribe=com.ardublock.translator.block.communication.PsnUnsubscribeBlock